主题中指定的 EditText 样式背景不适用于 EditTex?
EditText style background specified in theme doesn't apply to EditTex?
我正在创建类似图像的 EditText。 (实际上,我做到了。)
已创建 drawable xml
并将 EditText 设置为背景。
然而,为了更容易地管理它,我在 theme
中创建了一个样式并将其分配给 EditText
中的 style
属性,但它不是应用。
这是什么原因?
(或者如果有更好的方法来创建这些 EditText,请告诉我)
--
可绘制
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="5dp"/>
<solid android:color="@color/gray_400"/>
</shape>
theme.xml
<!-- memo EditText style -->
<style name="MemoEditTextStyle" parent="Widget.AppCompat.EditText">
<item name="background">@drawable/edittext_memo</item>
<item name="android:textColor">@color/purple_200</item>
<item name="android:textColorHighlight">@color/gray_400</item>
<item name="colorControlActivated">@color/gray_400</item>
</style>
在xml
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
style="@style/MemoEditTextStyle"
android:hint="@string/hint_memo"
android:paddingLeft="10dp"
android:gravity="center_vertical"/>
结果
背景不适用于 EditText,因为在样式中您定义了 属性 <item name="background">
而不是 <item name="android:background">
.
同样的结果也可以使用 Widget.MaterialComponents
实现,而不需要可绘制的 xml 形状,如下例所示:
自定义TextInputLayout.OutlinedBox样式:
<style name="Custom.TextInputLayout.OutlinedBox" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="boxBackgroundMode">outline</item>
<item name="boxBackgroundColor">#c2c0ba</item>
<item name="boxStrokeColor">#c2c0ba</item>
<item name="boxStrokeErrorColor">#FF0000</item>
<item name="boxCornerRadiusTopStart">5dp</item>
<item name="boxCornerRadiusTopEnd">5dp</item>
<item name="boxCornerRadiusBottomStart">5dp</item>
<item name="boxCornerRadiusBottomEnd">5dp</item>
<item name="boxStrokeWidth">0dp</item>
<item name="boxCollapsedPaddingTop">0dp</item>
<item name="hintEnabled">false</item>
<item name="errorIconDrawable">@null</item>
<item name="errorTextColor">#FF0000</item>
<item name="android:textColorHint">#B3B3B3</item>
<item name="materialThemeOverlay">@style/Custom.ThemeOverlay.TextInputEditText.OutlinedBox</item>
</style>
<style name="Custom.ThemeOverlay.TextInputEditText.OutlinedBox" parent="@style/ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox">
<item name="editTextStyle">@style/Custom.TextInputEditText.OutlinedBox</item>
</style>
<style name="Custom.TextInputEditText.OutlinedBox" parent="@style/Widget.MaterialComponents.TextInputEditText.OutlinedBox">
<item name="android:paddingTop">16dp</item>
<item name="android:paddingBottom">16dp</item>
<item name="android:paddingStart">10dp</item>
<item name="android:paddingEnd">10dp</item>
<item name="android:paddingLeft">10dp</item>
<item name="android:paddingRight">10dp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textColorHint">@color/black</item>
</style>
用法:
<com.google.android.material.textfield.TextInputLayout
style="@style/Custom.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="MEMO"/>
</com.google.android.material.textfield.TextInputLayout>
结果:
我正在创建类似图像的 EditText。 (实际上,我做到了。)
已创建 drawable xml
并将 EditText 设置为背景。
然而,为了更容易地管理它,我在 theme
中创建了一个样式并将其分配给 EditText
中的 style
属性,但它不是应用。
这是什么原因?
(或者如果有更好的方法来创建这些 EditText,请告诉我)
--
可绘制
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="5dp"/>
<solid android:color="@color/gray_400"/>
</shape>
theme.xml
<!-- memo EditText style -->
<style name="MemoEditTextStyle" parent="Widget.AppCompat.EditText">
<item name="background">@drawable/edittext_memo</item>
<item name="android:textColor">@color/purple_200</item>
<item name="android:textColorHighlight">@color/gray_400</item>
<item name="colorControlActivated">@color/gray_400</item>
</style>
在xml
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
style="@style/MemoEditTextStyle"
android:hint="@string/hint_memo"
android:paddingLeft="10dp"
android:gravity="center_vertical"/>
结果
背景不适用于 EditText,因为在样式中您定义了 属性 <item name="background">
而不是 <item name="android:background">
.
同样的结果也可以使用 Widget.MaterialComponents
实现,而不需要可绘制的 xml 形状,如下例所示:
自定义TextInputLayout.OutlinedBox样式:
<style name="Custom.TextInputLayout.OutlinedBox" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="boxBackgroundMode">outline</item>
<item name="boxBackgroundColor">#c2c0ba</item>
<item name="boxStrokeColor">#c2c0ba</item>
<item name="boxStrokeErrorColor">#FF0000</item>
<item name="boxCornerRadiusTopStart">5dp</item>
<item name="boxCornerRadiusTopEnd">5dp</item>
<item name="boxCornerRadiusBottomStart">5dp</item>
<item name="boxCornerRadiusBottomEnd">5dp</item>
<item name="boxStrokeWidth">0dp</item>
<item name="boxCollapsedPaddingTop">0dp</item>
<item name="hintEnabled">false</item>
<item name="errorIconDrawable">@null</item>
<item name="errorTextColor">#FF0000</item>
<item name="android:textColorHint">#B3B3B3</item>
<item name="materialThemeOverlay">@style/Custom.ThemeOverlay.TextInputEditText.OutlinedBox</item>
</style>
<style name="Custom.ThemeOverlay.TextInputEditText.OutlinedBox" parent="@style/ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox">
<item name="editTextStyle">@style/Custom.TextInputEditText.OutlinedBox</item>
</style>
<style name="Custom.TextInputEditText.OutlinedBox" parent="@style/Widget.MaterialComponents.TextInputEditText.OutlinedBox">
<item name="android:paddingTop">16dp</item>
<item name="android:paddingBottom">16dp</item>
<item name="android:paddingStart">10dp</item>
<item name="android:paddingEnd">10dp</item>
<item name="android:paddingLeft">10dp</item>
<item name="android:paddingRight">10dp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textColorHint">@color/black</item>
</style>
用法:
<com.google.android.material.textfield.TextInputLayout
style="@style/Custom.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="MEMO"/>
</com.google.android.material.textfield.TextInputLayout>
结果: