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