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

Cod*_*oet 78 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>
Run Code Online (Sandbox Code Playgroud)

然后我可以EditText通过这样做来制作一个特殊的风格:

<EditText ...
    style="@style/App_EditTextStyle
    ...>
Run Code Online (Sandbox Code Playgroud)

但是这样我必须记住为EditText我的应用程序中的每一个单独设置样式,这很繁琐,如果不是容易出错的话.

有什么办法可以让它成为主题的一部分吗?这样我就不必将这种风格与每种风格联系起来了EditText.像这个虚构的代码块:

<style name="App_Theme" parent="@android:style/Theme.Holo">
   ... 
   <item name="android:EditTextSyle">@style/App_EditTextStyle</item>
   ...
<style>
Run Code Online (Sandbox Code Playgroud)

然后在我的AndroidManifest.xml我有类似的东西:

<application
    ....
    android:theme="@style/App_Theme">
Run Code Online (Sandbox Code Playgroud)

还有瞧!所有我EditText都有一致的风格,而不必为每个实例指定样式.

Luk*_*rog 145

覆盖指向自定义主题中EditText样式(名为editTextStyle:) 的属性:

<style name="App_Theme" parent="@android:style/Theme.Holo">
   <item name="android:editTextStyle">@style/App_EditTextStyle</item>
</style>
Run Code Online (Sandbox Code Playgroud)

并使您的自定义样式扩展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>
Run Code Online (Sandbox Code Playgroud)

  • 这听起来似乎合情合理,但它似乎对我不起作用.我可以错过一些东西吗? (3认同)
  • @ toobsco42`edittextStyle`不适用于`AutoCompleTextView`(虽然它是`EditText`).看一下theme.xml中的`autoCompleteTextViewStyle`属性,该属性指向style.xml文件中的`Widget.AutoCompleTextView`样式. (3认同)
  • 对我也不起作用.但是如果我将`<item name ="android:editTextStyle">`更改为`<item name ="editTextStyle">`,那就没关系.谢谢! (2认同)

ifl*_*flp 50

@Luksprog答案是正确的但不适合我.经过一些实验,我发现从editTextStyle中删除android命名空间使它对我有用.

<style name="App_Theme" parent="@android:style/Theme.Holo">
   <item name="editTextStyle">@style/App_EditTextStyle</item>
</style>
Run Code Online (Sandbox Code Playgroud)

并使您的自定义样式扩展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>
Run Code Online (Sandbox Code Playgroud)

  • 可能与`AppCompat`库有关.您的活动是否扩展了"AppCompatActivity"?哦,Android开发的奥秘. (3认同)

Rey*_*lar 17

首先,为EditText定义样式.确保父样式是android:Widget.EditText

<style name="CustomEditTextStyle" parent="android:Widget.EditText">

    <item name="android:textColor">#0F0F0F</item>
    <!-- ... More items here if needed ... -->
</style>
Run Code Online (Sandbox Code Playgroud)

之后,覆盖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>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你指出兼容性设置 (4认同)