10

私は、活動に関するすべてのテキストビューを活用したいというテーマを持っています。そこで、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サブタイトル、およびポップメニュー項目を大文字にするという副作用がありました。そのため、テーマの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>

ありがとう、ジョナサン

4

2 に答える 2

8

古いAPI(14未満)をサポートするAndroidアプリでAppCompat を使用するtextAllCaps

この回避策は、次のようにスタイルを明示的に設定することです。

<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>このウィジェットは、を介してテーマに設定されているデフォルトのスタイルを継承しませんandroid:textViewStyle

2>このウィジェットの使用は、パッケージ名を考えると内部的なもののようです。これは、実際にはパブリックAPIを対象としていないことを意味します。また、textAllCaps属性をスタイル/ビューに直接配置する必要があり、それを機能させるためにtextAppearanceスタイルにすることはできないという点で、「完全にベイク処理」されていません。

于 2014-03-18T03:57:36.707 に答える
1

textAllCapsとの両方で試してくださいandroid:textAllCaps

<style name="TextViewStyle">
      <item name="textAllCaps">true</item>
      <item name="android:textAllCaps">true</item>
</style>

しかし、23.2.0以降のデザインライブラリでのみ機能していると思います。

于 2017-08-08T14:00:13.447 に答える