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:

Android海拔

出于某种原因,如果您使用透明度设置纯色,则不显示高程阴影。

在你的例子中,我将#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_alignLeftandroid: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中没有透明。

请注意,如果您在清单中有以下行,则阴影将不会显示:

机器人:硬件加速=“假”