我已经玩了几天的L预览,有一件似乎不起作用的是视图的
android:elevation属性.它在调用View.setElevation()时工作正常,但它似乎忽略了
XML属性.我正在使用
Android Studio 0.8.2并将minSdkVersion和targetSdkVersion设置为’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:提升,底部卡应该在“地面”上平坦,但事实并非如此.事实上,它看起来没有什么不同,顶级卡的高度是5dp.这是一个已知问题,它对你有用吗?
编辑:似乎这只是CardView的情况,或者至少它不是按钮的问题.在这个布局中,我用Button替换了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:已经证实这个问题只影响CardView,android:elevation适用于任何其他视图.有关发生这种情况的详细解释,请查看已接受的答案.与此同时,我的解决方法是用FrameLayout替换CardView并将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
解决方法
CardView在初始化期间设置自己的高程,它将覆盖您从XML设置的任何内容.您应该在
https://code.google.com/p/android-developer-preview/wiki/FilingIssues?tm=3将此文件作为错误提交
@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)); }