我只用一个按钮即可拥有这个最小的Android Studio项目。 我为按钮分配了一个阴影:
android:elevation="3dp"
android:translationZ="3dp"
android:stateListAnimator="@null"
我在Android Studio Design标签中看到了阴影。但我也在xml编辑器中收到警告
属性...仅用于API级别21及更高级别(当前最小值为16)
实际上,按钮阴影仅显示在API level 21 or higher
的模拟器中,并且显示为平面,在API level lower than 21
的模拟器中完全没有阴影。
所以具体问题是,如何在API's lower than 21
中模拟阴影效果。
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:id="@+id/main_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:weightSum="1">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="20dp"
android:layout_weight="2.24">
<Button
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginLeft="20dp"
android:layout_marginBottom="20dp"
android:elevation="5dp"
android:translationZ="5dp"
android:stateListAnimator="@null"
android:background="@android:color/holo_green_light"
android:text="BUTTON"/>
</RelativeLayout>
</LinearLayout>
</ScrollView>
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
答案 0 :(得分:10)
对于Pre-LolliPop
设备,您必须使用可绘制文件创建阴影或高程。这样。
在您的文件夹中创建drawable
文件,例如 element_background.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#BDBDBD"/>
<corners android:radius="5dp"/>
</shape>
</item>
<item
android:left="0dp"
android:right="0dp"
android:top="0dp"
android:bottom="2dp">
<shape android:shape="rectangle">
<solid android:color="#ffffff"/>
<corners android:radius="5dp"/>
</shape>
</item>
</layer-list>
然后将以下代码添加到您想要的元素中。
android:background="@drawable/element_background"
答案 1 :(得分:6)
如果您愿意,可以试试Carbon。它是一个库向后移植材料的功能,回到2.2。它还支持高程和生成的动画阴影。