Android棒棒糖上的海拔不起作用
我正在尝试在最新的Android Lollipop预览版中使用海拔属性。 我将targetSdk设置为21,将主题设置为Material。 接下来,我将一个背景形状添加到TextView,并将高程设置为8dp,但TextView没有显示任何阴影的迹象。 这是在运行棒棒糖预览的Nexus7上。 还有什么我不得不考虑?
这是布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/rect" android:text="hallo world" android:padding="8dp" android:elevation="8dp" /> </LinearLayout>
这是可以绘制的背景:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#7d0073ff" /> <corners android:radius="16dp" /> </shape>
这是TextView:
出于某种原因,如果您使用透明度设置纯色,则不显示高程阴影。
在你的例子中,我将#7d0073ff更改为#0073ff,并得到了一个影子。
这可能是一个错误,因为在他们的文档中给出了一个使用半透明背景颜色的类似示例。
再次通过文档后,我终于find了解决办法。
只需在card_view:cardUseCompatPadding="true"
添加card_view:cardUseCompatPadding="true"
,棒棒糖设备上就会出现阴影。
发生的情况是, CardView
的内容区域在棒棒糖和棒棒糖设备上的大小不同。 所以在棒棒糖设备中,阴影实际上被卡片覆盖,所以它看不见。 通过添加此属性,所有设备的内容区域保持不变,阴影变得可见。
我的XML代码是这样的:
<android.support.v7.widget.CardView android:id="@+id/media_card_view" android:layout_width="match_parent" android:layout_height="130dp" card_view:cardBackgroundColor="@android:color/white" card_view:cardElevation="2sp" card_view:cardUseCompatPadding="true" > ... </android.support.v7.widget.CardView>
将android:海拔阴影添加到ImageView中:
android:clipToPadding="false" + android:outlineProvider="bounds" + android:elevation="2dp"
我也有这个问题,事实certificate,你需要在Android清单中打开硬件加速
<application ... android:hardwareAccelerated="true">
TL; DR
检查你的卡:(或任何你使用的词)名称空间声明,并确保它匹配: xmlns:card =“http://schemas.android.com/apk/res-auto”;
我知道这里已经有几个答案了,但是我想补充一下,因为它没有包括在当前的build议中。 为了让阴影在KitKat和Marshmallow上都能正常工作(只有我尝试过的模拟器,我确定它可以在两者之间工作)。我将下面的xml属性添加到我的卡上:
card:cardElevation="25dp" card:cardUseCompatPadding="true"
在将我的头撞在桌子上,为什么这种方式不起作用,试图将卡的背景颜色设置为完全不透明,使清单中的硬件加速,甚至祈祷,我检查了我的文件中的名称空间声明。 令我惊骇的是,我看到卡xml命名空间已被分配到以下内容:
xmlns:card="http://schemas.android.com/tools"
修复了这个命名空间声明之后,我再次运行了我的虚拟应用程序,随着阴影最终被显示出来,松了一口气。
如果你是一个像我这样的怀疑者,这是certificate。 请Google,Android,谁:再次使阴影变得更好。 他们不应该这么难。
以下是创build下图所示布局的整个文件:
<?xml version="1.0" encoding="utf-8"?> <!--MAKE SURE YOU HAVE THE RIGHT XML NAMESPACE ASSIGNED--> <!--TO WHATEVER WORD YOU PUT IN FRONT OF THE CARD--> <!--XML ATTRIBUTES. IN THIS CASE, MINE IS card--> <android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:card="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#607D8B" android:fitsSystemWindows="true" tools:context="com.mlustig.playground.MainActivity"> <android.support.v7.widget.CardView android:layout_width="100dp" android:layout_height="100dp" android:layout_centerInParent="true" app:layout_aspectRatio="66%" app:layout_heightPercent="75%" card:cardElevation="25dp" card:cardUseCompatPadding="true" /> </android.support.percent.PercentRelativeLayout>
是的我知道。 很烦人,你不能简单地复制和粘贴这个布局并运行它,因为它里面有PercentRelativeLayout,但是我故意把它留在那里。 你一定要检查 出来 。 超强大,非常有用。 不错不错 希望这有助于。
尝试使用:app:cardElevation =“4dp”
如前所述,这是Android中的一个开放性错误 :如果背景可绘制使用透明的纯色,则不会显示阴影。
要解决该问题,请在自己的单独视图中显示背景,并在该视图上设置Alpha。 将背景视图和TextView
包装在一个RelativeLayout
,将背景直接放置在TextView
下面,并使用android:layout_alignLeft
, android:layout_alignBottom
等来使它的大小相同。 他们需要在相同的高度,背景必须出现在XML中的TextView
之前,所以它被绘制在它下面。
<RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="40dp" android:paddingRight="40dp" android:paddingTop="20dp" android:paddingBottom="20dp" android:clipToPadding="false" android:background="#ffffff"> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/text_view" android:layout_alignRight="@id/text_view" android:layout_alignBottom="@id/text_view" android:layout_alignTop="@id/text_view" android:background="@drawable/rect" android:alpha="0.5" android:elevation="8dp"/> <TextView android:id="@id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hallo world" android:textColor="#ffffff" android:padding="8dp" android:elevation="8dp" /> </RelativeLayout>
drawable与你的一样,但没有透明度:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#0073ff" /> <corners android:radius="16dp" /> </shape>
结果:
几个值得注意的地方:
- 您必须确保封闭的
RelativeLayout
足够大以显示阴影。 如果您只是将其维度设置为wrap_content
而没有填充,则阴影将被剪裁到布局的边界。 正如在这个问题中所解释的,你可以使用填充和设置android:cipToPadding="false"
来使它足够大的阴影。 在这种情况下你可能不需要太多填充,我还没有尝试过。 - 在这种情况下,我们需要为背景使用单独的视图,因为如果我们直接在
TextView
上设置了alpha
,文本也会受到影响。 根据您的使用情况,您可能不需要单独的视图和封闭的布局,只能有一个视图,在视图上设置了alpha
,而在drawable中没有透明。
请注意,如果您在清单中有以下行,则阴影将不会显示:
机器人:硬件加速=“假”