2012-06-26 48 views
10

我有一個主題,要求所有關於活動的文本瀏覽被大寫。所以我設置的風格textAllCaps,然後將其應用到textViewStyle在我的主題,如下面Android 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="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

你是否想要使一個特定的'TextView'全部大寫?如果沒有,那麼你會介意告訴每個人你試圖製作全部大寫字母嗎?可能沒有必要按照原樣設置你的風格。 – adneal

+0

當然。我正在嘗試使所有出現在「活動全部大寫」上的TextView。然而,副作用是有幾個地方使用TextViews獲得全部大寫樣式,所以我想撤消這些特定位置的所有大寫字母。我目前知道的兩個地方是標題和菜單彈出窗口。 –

回答

8

通過使用程序兼容性textAllCaps在Android應用此周邊配套較舊的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"/> 

或者可選地使用新樣式inheri TS 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>使用此小部件似乎是內部gi包名意味着它不是真的用於公共API。它也不是「完全烘焙」的,因爲textAllCaps屬性需要直接在樣式/視圖上,並且不能以textAppearance樣式運行。

0

請試用textAllCapsandroid:textAllCaps

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

但我認爲它只適用於設計庫23.2.0或更高版本。