在某些Android 4.X设备上不使用appcompat库应用主题

在将appcompat库更新到最新版本(v21)以应用材质devise之后,我的自定义主题不再在Android 4.0.X设备上使用,除非我明确声明它在XML中。

我已经在Android 2.3.X和5.0.0设备上testing过这个主题,并且可以在这些设备上运行。 但是,Android 4.0.3并没有在我的HTC One S上运行。 我需要做什么来解决这个问题?

我的themes.xml

<style name="Theme.Custom" parent="@style/Theme.AppCompat.Light"> <item name="android:editTextStyle">@style/Custom.Widget.EditText</item> <item name="android:buttonStyle">@style/Custom.Widget.Button</item> </style> 

我的styles.xml

 <style name="Custom.Widget.EditText" parent="android:Widget.EditText"> <item name="android:background">@drawable/edit_text_holo_light</item> <item name="android:textColor">@color/text_primary</item> <item name="android:textColorHint">@color/text_hint_color</item> </style> <style name="Custom.Widget.Button" parent="android:Widget.Button"> <item name="android:background">@drawable/btn_default_holo_light</item> <item name="android:minHeight">48dip</item> <item name="android:minWidth">64dip</item> <item name="android:textColor">@color/button_text_primary</item> </style> 

我的布局文件

 <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" > <!-- other elements --> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:paddingLeft="16dp" android:paddingRight="16dp" > <EditText android:id="@+id/view_username_edit_username_editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textNoSuggestions|textCapSentences" android:hint="@string/UsernameScreen_usernameHint" android:imeOptions="actionDone" android:singleLine="true" android:maxLength="@integer/username_max_length" android:textSize="@dimen/text_size_medium" /> <Button android:id="@+id/view_username_save_Button" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/view_username_edit_username_editText" android:clickable="true" android:enabled="false" android:orientation="horizontal" android:text="@string/common_save" /> </RelativeLayout> </RelativeLayout> 

如果我将以下内容添加到工作的布局文件中的行中。 所以似乎有一些错误的themes.xml。

 style="@style/Custom.Widget.EditText" style="@style/Custom.Widget.Button" 

结果:

结果

预期:

预期

编辑

我在其他一些设备上testing了相同的代码。

  • 三星S2(4.0.4):好的
  • HTC One(4.4.3):好的
  • HTC One X(4.0.3):NOK
  • HTC One S(4.1.1):NOK
  • HTC Desire C(4.0.3):NOK

我不明白为什么这些设备无法工作。

Solutions Collecting From Web of "在某些Android 4.X设备上不使用appcompat库应用主题"

我添加buttonStyle后没有“android:”前缀,它解决了这个问题。 (name =“android:buttonStyle” – > name =“buttonStyle”)

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="buttonStyle">@style/SkinedButton</item> </style> 

最后,我find了解决我的问题。 我正在使用@style/Theme.AppCompat作为我的一个样式的父项。 将其更改为@style/Theme.AppCompat.Light.DarkActionBar它可以在所有设备上使用。 我仍然觉得这很奇怪,为什么这会搞砸我的造型。