【问题标题】:Set a consistent style to all EditText (for e.g.)为所有 EditText 设置一致的样式(例如)
【发布时间】:2012-06-09 20:16:48
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

    在您的自定义主题中覆盖指向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>
    

    【讨论】:

    • 这听起来很合理和合乎逻辑,但它似乎对我不起作用。我会错过什么吗?
    • @ManishGupta 到底怎么行不通?我已经测试了上面的样式并且它们可以工作,但是 layout_height/height 不能放在那里,因为 android 可能会在主题样式之前检查这些属性并且它会抱怨它们丢失。但是自定义drawable +不同的文本颜色适用于上述内容。
    • 我已经按照您的描述进行了设置。我转发也没有意义。反正我把这个给你。我在某处遗漏了一些东西。你规定的是冷逻辑,应该有效。我会在冷静后重新审视这个。谢谢。
    • @toobsco42 edittextStyle 不适用于AutoCompleTextView(尽管它是EditText)。查看 theme.xml 中的 autoCompleteTextViewStyle 属性,它指向 style.xml 文件中的 Widget.AutoCompleTextView 样式。
    • 对我也不起作用。但如果我将&lt;item name="android:editTextStyle"&gt; 更改为&lt;item name="editTextStyle"&gt;,就可以了。谢谢!
    【解决方案2】:

    @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>
    

    【讨论】:

    • 也适合我。但是为什么会这样呢?
    • 可能与AppCompat 库有关。您的活动是否扩展AppCompatActivity?哦,Android 开发的奥秘。
    • 谢谢kkss。
    • 即使不使用 Widget.AppCompat.EditText 也能正常工作。但我无法访问 Widget.AppCompat.EditText。说“无法解析符号'@android:style/Widget.AppCompat.EditText'”
    【解决方案3】:

    首先,为您的 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>
    

    【讨论】:

      【解决方案4】:

      如果您只需要设置一些简单的参数,例如文本颜色,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>
      

      【讨论】:

      • 对于较新版本的 AppCompat,请使用 editTextColor 并删除 android:
      【解决方案5】:
      <style name="App_Theme" parent="@android:style/Theme.Holo">    
          <item name="android:editTextBackground">@drawable/filled_roundededges_box_dark</item>
      </style>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-30
        • 2018-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多