Android set edit text style globally in theme doesn't work

僤鯓⒐⒋嵵緔 提交于 2020-01-10 00:38:30

问题


I am facing with problem. I am trying to make edit texts in my app look the same with the help of theme.
I have generated styles with the help of online tools (9-patch images) and tried to set it in my theme like this

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

My style for edit text

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

But this doesn't work if use edit text without specifying style manually for each edit text.

This doesn't work

<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" />

This works

<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" />

I know that layout_* params will not affect if they are used in theme, but other attributes should work.

Please help with this problem.


回答1:


instead of this..

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

use this..

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



回答2:


What Should You Do

Use this @android:style/Widget.EditText instead parent="android:Widget.EditText" .I hope it will helps you .

Please read This SO Answer Set a consistent style to all EditText

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



回答3:


if your are using appcompat >v22 you can try using

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

and in your layout.xml set the android:theme propertie to the 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" />



回答4:


In addition to fixing the reference to the Widget.EditText:

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

You need to create a "theme" and apply it in your manifest. Like this:

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



回答5:


Use your style.xml To get Good theme with cursor lite

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="android:style/Theme.Holo.Light">
        <!-- Customize your theme here. -->
    </style>

    <style name="NoActionBar" parent="android:style/Theme.Holo.Light.NoActionBar">
        <!-- Customize your theme here. -->
    </style>

    <style name="FullScreen" parent="android:style/Theme.Holo.Light.NoActionBar.Fullscreen">
        <!-- Customize your theme here. -->
    </style>
</resources>

Add this in your Style.xml

If this answer is not satisfied you can edit or ask me for delete



来源:https://stackoverflow.com/questions/32377202/android-set-edit-text-style-globally-in-theme-doesnt-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!