我有一个主题,希望所有关于活动的文本视图都被大写。所以我在一个样式中设置textAllCaps,然后将它应用到我的主题中的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字幕和popmenu项目变为大写。所以我想我会在我的主题中设置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>
谢谢, 乔纳森
答案 0 :(得分:8)
在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&gt;使用此小部件似乎是内部的,因为包名称意味着它并不真正用于公共API。它也没有“完全烘焙”,因为textAllCaps
属性需要直接在样式/视图上,并且不能在textAppearance样式中才能工作。
答案 1 :(得分:1)
同时使用textAllCaps
和android:textAllCaps
。
<style name="TextViewStyle">
<item name="textAllCaps">true</item>
<item name="android:textAllCaps">true</item>
</style>
但我认为它只适用于设计库23.2.0或更高版本。