我有一个主题,希望所有关于活动的文字资料被大写.所以我设置一个styleAllCaps在一个样式,然后应用到textViewStyle在我的主题像下面
<style name="Widget.Apex.TextView" parent="android:Widget.TextView"> <item name="android:textAppearance">?android:attr/textAppearanceSmall</item> <item name="android:textAllCaps">true</item> </style> <style name="MyTheme" parent="@android:style/Theme.Holo"> <item name="android:textViewStyle">@style/Widget.Apex.TextView</item> </style>
不幸的是,这样会产生副作用,即将我的应用程序标题,ActionBar字幕和popumenu项目大小写.所以我想我只是在我的主题中设置ActionBarStyle,textAppearanceLargePopupMenu和textAppearanceSmallPopupMenu属性,以使用textAllCaps = false的自定义样式.但是,这不行.我知道我的主题正在应用,因为如果我设置textColor或textStyle,它们都应用于标题和菜单项.是否可以覆盖这些样式中的textAllCaps?
<style name="Widget.Apex.TextView" parent="android:Widget.TextView"> <item name="android:textAppearance">?android:attr/textAppearanceSmall</item> <item name="android:textAllCaps">true</item> </style> <style name="TextAppearance.Apex.Widget.ActionBar.Title" parent="android:TextAppearance.Holo.Widget.ActionBar.Title"> <item name="android:textAllCaps">false</item> <item name="android:textStyle">italic</item> </style> <style name="TextAppearance.Apex.Widget.ActionBar.Subtitle" parent="android:TextAppearance.Holo.Widget.ActionBar.Subtitle"> <item name="android:textAllCaps">false</item> <item name="android:textStyle">italic</item> <item name="android:textColor">#FF0000</item> </style> <style name="TextAppearance.Apex.Widget.PopupMenu.Large" parent="android:TextAppearance.Holo.Widget.PopupMenu.Large"> <item name="android:textAllCaps">false</item> <item name="android:textStyle">italic</item> <item name="android:textColor">#FF0000</item> </style> <style name="TextAppearance.Apex.Widget.PopupMenu.Small" parent="android:TextAppearance.Holo.Widget.PopupMenu.Small"> <item name="android:textAllCaps">false</item> <item name="android:textStyle">italic</item> <item name="android:textColor">#FF0000</item> </style> <style name="Widget.Apex.ActionBar" parent="android:Widget.Holo.ActionBar"> <item name="android:titleTextStyle">@style/TextAppearance.Apex.Widget.ActionBar.Title</item> <item name="android:subtitleTextStyle">@style/TextAppearance.Apex.Widget.ActionBar.Subtitle</item> </style> <style name="MyTheme" parent="@android:style/Theme.Holo"> <item name="android:actionBarStyle">@style/Widget.Apex.ActionBar</item> <item name="android:textAppearanceLargePopupMenu">@style/TextAppearance.Apex.Widget.PopupMenu.Large</item> <item name="android:textAppearanceSmallPopupMenu">@style/TextAppearance.Apex.Widget.PopupMenu.Small</item> <item name="android:textViewStyle">@style/Widget.Apex.TextView</item> </style>
谢谢,
乔纳森
解决方法
通过在Android应用程序中使用AppCompat textAllCaps支持较早的API(小于14)
为此,一个工作将明确地设置如下样式:
<android.support.v7.internal.widget.CompatTextView style="@style/MyTextViewStyle" android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" app:textAllCaps="true"/>
或者使用继承textViewStyle的新样式,并添加textAllCaps属性以及您选择的任何其他样式:
<style name="MyCompatTextViewStyle" parent="MyTextViewStyle"> <item name="textAllCaps">true</item> </style>
布局:
<android.support.v7.internal.widget.CompatTextView style="@style/MyCompatTextViewStyle" android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
注意:
1 GT;这个小部件不会继承任何通过android:textViewStyle在主题中设置的默认样式
2>使用这个小部件似乎是内部的,因为包名称意味着它不是真正用于公共API.因为textAllCaps属性需要直接在样式/视图上,并且不能在textAppearance样式中,因此它也不会“完全烘烤”.