86

我试图让EditText我的应用程序中的 all 具有一致的外观。我知道我可以做这样的事情:

<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's 都具有一致的样式,而无需我为每个实例指定样式。

4

5 回答 5

161

在您的自定义主题中覆盖指向EditTextstyle(named 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>
于 2012-06-05T20:09:27.773 回答
53

@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>
于 2015-12-23T05:03:09.677 回答
18

首先,为您的 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>
于 2016-04-15T18:42:06.113 回答
1

如果您只需要设置一些简单的参数,例如文本颜色,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>
于 2018-08-23T20:58:11.487 回答
-1
<style name="App_Theme" parent="@android:style/Theme.Holo">    
    <item name="android:editTextBackground">@drawable/filled_roundededges_box_dark</item>
</style>
于 2014-09-16T09:40:35.950 回答