我正在尝试让我的应用程序中的所有EditText
具有一致的外观。我知道我可以这样做:
<style name="App_EditTextStyle">
<item name="android:background">@drawable/filled_roundededges_box_dark</item>
<item name="android:textColor">#808080</item>
<item name="android:layout_height">45dip</item>
</style>
然后我可以通过这样做来使特定的EditText
具有这种风格:
<EditText ...
style="@style/App_EditTextStyle
...>
但是这样我必须记住在我的应用程序中为每个EditText
单独设置样式,这很繁琐,即使不容易出错。
有什么方法可以让它成为主题的一部分吗?这样我就不必将这种风格与每个EditText
相关联。像这个虚构的代码块:
<style name="App_Theme" parent="@android:style/Theme.Holo">
...
<item name="android:EditTextSyle">@style/App_EditTextStyle</item>
...
<style>
然后在我的AndroidManifest.xml
我有类似的东西:
<application
....
android:theme="@style/App_Theme">
而且瞧!我的所有EditText
都具有一致的风格,而我不必为每个实例指定样式。
答案 0 :(得分:143)
在自定义主题中覆盖指向EditText
样式(名为editTextStyle
:)的属性:
<style name="App_Theme" parent="@android:style/Theme.Holo">
<item name="android:editTextStyle">@style/App_EditTextStyle</item>
</style>
并使您的自定义样式扩展为Widget.EditText
:
<style name="App_EditTextStyle" parent="@android:style/Widget.EditText">
<item name="android:background">@drawable/filled_roundededges_box_dark</item>
<item name="android:textColor">#808080</item>
<item name="android:layout_height">45dip</item>
</style>
编辑:
如果你正在使用更新的AppCompat相关主题,请使用不带android前缀的editTextStyle属性:
<style name="App_Theme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="editTextStyle">@style/App_EditTextStyle</item>
</style>
答案 1 :(得分:45)
@Luksprog答案是正确的但不适合我。经过一些实验,我发现从editTextStyle中删除android命名空间使它对我有用。
<style name="App_Theme" parent="@android:style/Theme.Holo">
<item name="editTextStyle">@style/App_EditTextStyle</item>
</style>
并使您的自定义样式扩展Widget.EditText
或使用AppCompat主题Widget.AppCompat.EditText
:
<style name="App_EditTextStyle" parent="@android:style/Widget.EditText">
<item name="android:background">@drawable/filled_roundededges_box_dark</item>
<item name="android:textColor">#808080</item>
<item name="android:layout_height">45dip</item>
</style>
答案 2 :(得分:17)
首先,为EditText定义样式。确保父样式为android:Widget.EditText
<style name="CustomEditTextStyle" parent="android:Widget.EditText">
<item name="android:textColor">#0F0F0F</item>
<!-- ... More items here if needed ... -->
</style>
之后,覆盖自定义主题中的属性android:editTextStyle
。请注意,如果您使用支持库,则还需要覆盖属性editTextStyle
(不带android命名空间)。
<style name="App_Theme" parent="...">
<item name="android:editTextStyle">@style/CustomEditTextStyle</item>
<item name="editTextStyle">@style/CustomEditTextStyle</item> <!-- For compatibility with the support library -->
</style>
答案 3 :(得分:0)
如果您只需要设置一些简单的参数(例如文本颜色),则Android名称空间将具有一些参数,而无需为编辑文本声明单独的样式。例如
<style name="MyStyle" parent="android:Theme.Material.NoActionBar">
<item name="colorPrimary">@color/black</item>
<item name="colorPrimaryDark">@color/white</item>
<item name="colorAccent">@color/white</item>
<item name="android:textColor">@color/black</item>
<item name="android:editTextColor">@color/black</item>
<item name="android:editTextBackground">@color/black</item>
....
</style>
答案 4 :(得分:-1)
<style name="App_Theme" parent="@android:style/Theme.Holo">
<item name="android:editTextBackground">@drawable/filled_roundededges_box_dark</item>
</style>