android:海拔在L预览中不起作用

我已经玩了几天的L预览,有一件事看起来不起作用,就是一个视图的android:elevation属性。 调用View.setElevation() ,它工作得很好,但似乎忽略了XML属性。 我正在使用Android Studio 0.8.2,并将minSdkVersiontargetSdkVersion设置为'L' ,并将compileSdkVersion设置为'android-L'buildToolsVersion"20.0.0" 。 这是一个示例布局,无法正常工作:

 <?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" android:orientation="vertical"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:layout_margin="10dp" android:elevation="5dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="top"/> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:layout_margin="10dp" android:elevation="0dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="bottom"/> </android.support.v7.widget.CardView> </LinearLayout> 

以下是结果的截图:imgur.com/mqeq9vK

根据我设定的android:elevation ,底部卡应该是平坦的“地面”,但不是。 事实上,看起来没有什么不同的是他们的高程是5dp 。 这是一个已知的问题,它是否适合你?

编辑:看来这只是与CardView的情况下,或者至less它不是Buttons的问题。 在这个布局中,我用Buttonreplace了CardView ,即使阴影是一种搞砸(已知的bug),你仍然可以看到不同的高程。

 <?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" android:orientation="vertical"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:elevation="2dp"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:elevation="1dp"/> </LinearLayout> 

编辑2:这是相当多的证实,这个问题只影响CardViewandroid:elevation工作正常任何其他视图。 为什么发生这种情况的详细解释看看接受的答案。 在此期间,我的解决方法是用CardViewreplaceCardView ,并将android:background设置为drawable。 这是一个卡背景可绘制的例子:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#fff" /> </shape> 

我也提出了这个错误,所以如果这个问题影响到你,请把这个问题列出来。 https://code.google.com/p/android-developer-preview/issues/detail?id=731

Solutions Collecting From Web of "android:海拔在L预览中不起作用"

CardView在初始化过程中设置了自己的高程,它将覆盖从XML中设置的任何东西。 您应该在https://code.google.com/p/android-developer-preview/wiki/FilingIssues?tm=3上将其作为错误提&#x4EA4;

 @Override public void initialize(CardViewDelegate cardView, Context context, int backgroundColor, float radius) { cardView.setBackgroundDrawable(new RoundRectDrawable(backgroundColor, radius)); View view = (View) cardView; view.setClipToOutline(true); view.setElevation(context.getResources().getDimension(R.dimen.cardview_elevation)); } 

请使用cardElevation属性在CardView上设置高程。 这也会影响前L的影子大小。

另请参阅其他属性的文档 。

请添加这个在你的根

 xmlns:card_view="http://schemas.android.com/apk/res-auto" 

下面是cardview的代码

 <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" card_view:cardElevation="10dp" android:id="@+id/view" > . . . . . Child . . . . </android.support.v7.widget.CardView> 

在错误修复发布之前,您可以通过编程来设置它。

我在RecyclerView这样做了:

在你的RecyclerView.Adapter中:

 public class MyAdapter extends RecyclerView.Adapter<TripsAdapter.ViewHolder> { /* ... */ public class ViewHolder extends RecyclerView.ViewHolder { CardView card; public ViewHolder(View itemView) { card = (CardView) itemView.findViewById(R.id.card_view); } } /* ... */ @Override public void onBindViewHolder(ViewHolder holder, int position) { /// ... // Update Card Elevation final float scale = mContext.getResources().getDisplayMetrics().density; holder.card.setElevation(1f * scale); //TODO set this in xml once CardView elevation bug is fixed } }