【问题标题】:Android set edit text style globally in theme doesn't workAndroid在主题中全局设置编辑文本样式不起作用
【发布时间】:2015-09-03 13:36:10
【问题描述】:

我遇到了问题。我正在尝试借助主题使我的应用中的编辑文本看起来相同。
我在在线工具(9 补丁图像)的帮助下生成了样式,并尝试像这样在我的主题中设置它

   <!-- Base application theme. -->
    <style name="DefaultAppTheme" parent="Theme.AppCompat">
        <!-- Main theme colors -->
        <!--   your app branding color for the app bar -->
        <item name="colorPrimary">@color/blue</item>
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="colorPrimaryDark">@color/darkblue</item>
        <!--   theme UI controls like checkboxes and text fields -->
        <item name="colorAccent">@color/cornflowerblue</item>
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="android:editTextStyle">@style/EditTextDefault</item>
    </style>

我的文本编辑风格

<style name="EditTextDefault" parent="android:Widget.EditText">
        <item name="android:background">@drawable/edit_text_holo_light</item>
        <item name="android:textColor">@color/light_blue</item>
        <item name="android:layout_marginLeft">@dimen/margin_edit_text_default</item>
        <item name="android:layout_marginRight">@dimen/margin_edit_text_default</item>
        <item name="android:layout_marginTop">@dimen/margin_edit_text_default</item>
    </style>

但是,如果使用编辑文本而不为每个编辑文本手动指定样式,这将不起作用。

这不起作用

<EditText
    android:id="@+id/edit_text_login"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/edit_text_password"
    android:hint="@string/hint_enter_login"
    android:inputType="textEmailAddress" />

这行得通

<EditText
    android:id="@+id/edit_text_login"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/edit_text_password"
    style="@style/EditTextDefault"
    android:hint="@string/hint_enter_login"
    android:inputType="textEmailAddress" />

我知道 layout_* 参数如果在主题中使用不会影响,但其他属性应该可以工作。

请帮助解决这个问题。

【问题讨论】:

  • 这很奇怪...相同的设置(尽管EditTextDefault 可能应该从@android:style/Widget.EditText 继承而不是android:Widget.EditText)对我来说不需要为EditText 指定style 标签
  • @blipinsk 你是对的
  • 您也可以在默认主题中使用此行&lt;item name="editTextColor"&gt;@color/black&lt;/item&gt;

标签: android android-layout android-fragments android-theme


【解决方案1】:

而不是这个..

<item name="android:editTextStyle">@style/EditTextDefault</item>

使用这个..

<item name="editTextStyle">@style/EditTextDefault</item>

【讨论】:

  • 资源样式,支持你运行的api,两者都可以用。
  • 非常感谢!我可以对其他组件使用相同的逻辑吗?
【解决方案2】:

你应该怎么做

使用@android:style/Widget.EditText 代替parent="android:Widget.EditText"。希望对您有所帮助。

请阅读此 SO 答案 Set a consistent style to all EditText

<style name="EditTextDefault" parent="@android:style/Widget.EditText">

【讨论】:

    【解决方案3】:

    如果您使用的是 appcompat >v22,您可以尝试使用

    <style name="EditText.Colored" parent="Theme.AppCompat">
        <item name="colorControlNormal">@color/colorNormal</item>
        <item name="colorControlActivated">@color/colorActivated</item>
        <item name="colorControlHighlight">@color/colorControlHighlight</item>
    </style>
    

    并在您的 layout.xml 中将 android:theme 属性设置为 edittext

    <EditText
        android:id="@+id/edit_text_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/edit_text_password"
        android:theme="@style/EditText.Colored"
        android:hint="@string/hint_enter_login"
        android:inputType="textEmailAddress" />
    

    【讨论】:

    • 你知道有没有办法在应用主题中设置 EditText 主题?
    【解决方案4】:

    除了修复对 Widget.EditText 的引用:

    <style name="EditTextDefault" parent="@android:style/Widget.EditText">
    

    您需要创建一个“主题”并将其应用到您的清单中。像这样:

    <application
        ...
        android:theme="@android:style/DefaultAppTheme" >
    </application>
    

    【讨论】:

    • 您能否开发答案,以便仅为 EditText 创建一个通用主题?您正在使用 EditText 覆盖一般应用程序主题,这没有任何意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多