为所有EditText设置一致的样式(例如)

时间:2012-06-05 19:28:47

标签: android

我正在尝试让我的应用程序中的所有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都具有一致的风格,而我不必为每个实例指定样式。

5 个答案:

答案 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>