Android中为TextInputLayout添加阴影:elevation设置无效的解决方法
解决TextInputLayout设置elevation不生效的问题
直接给TextInputLayout设置android:elevation不生效,通常是因为组件默认背景没有提供阴影绘制的载体,或者自身样式限制。以下是几种可行的解决方式:
方法1:添加实体背景并保留elevation
elevation需要组件有非透明背景才能显示阴影,给TextInputLayout添加一个背景drawable,同时开启不裁剪padding避免阴影被遮挡:
<com.google.android.material.textfield.TextInputLayout android:id="@+id/textInputLayout2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="8dp" android:layout_marginEnd="16dp" android:elevation="10dp" android:background="@drawable/text_input_bg" android:clipToPadding="false"> <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" android:layout_height="match_parent" android:focusableInTouchMode="true"/> </com.google.android.material.textfield.TextInputLayout>
在res/drawable下创建text_input_bg.xml:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@android:color/white"/> <corners android:radius="4dp"/> </shape>
方法2:利用Material组件的内置背景模式
如果使用Material Design 3的TextInputLayout,可以通过boxBackgroundMode启用填充/轮廓背景,再配合elevation:
<com.google.android.material.textfield.TextInputLayout android:id="@+id/textInputLayout2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="8dp" android:layout_marginEnd="16dp" android:elevation="10dp" app:boxBackgroundMode="filled" app:boxBackgroundColor="@android:color/white" android:clipToPadding="false"> <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" android:layout_height="match_parent" android:focusableInTouchMode="true"/> </com.google.android.material.textfield.TextInputLayout>
方法3:自定义带阴影的背景Drawable
不想依赖elevation的话,直接给TextInputLayout设置带阴影的layer-list背景:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 阴影层 --> <item> <shape> <padding android:bottom="2dp" android:left="2dp" android:right="2dp" android:top="2dp"/> <solid android:color="#1A000000"/> <corners android:radius="4dp"/> </shape> </item> <!-- 主体背景层 --> <item> <shape> <solid android:color="@android:color/white"/> <corners android:radius="4dp"/> </shape> </item> </layer-list>
将这个drawable设置为TextInputLayout的android:background即可。
另外注意:你原代码里android:elevation="10dp>缺少闭合引号,这是语法错误,记得补上"。
内容的提问来源于stack exchange,提问作者Mehrzad
相关产品推荐
相关产品推荐

