2012-06-26 17 views
10

Ho un tema in cui sono desiderabili tutte le visualizzazioni di testo sulle attività da capitalizzare. Così ho impostato textAllCaps in uno stile e poi applicato alla textViewStyle nel mio tema come il seguitoAndroid textAllCaps nel tema

<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> 

Purtroppo questo ha avuto l'effetto collaterale di trasformare il mio titolo dell'applicazione, sottotitoli ActionBar, e gli elementi PopMenu capitalizzati. Quindi ho pensato di impostare gli stili ActionBarStyle, textAppearanceLargePopupMenu e textAppearanceSmallPopupMenu nel mio tema per avere uno stile personalizzato con textAllCaps = false. Tuttavia, questo non funziona. So che i miei temi vengono applicati perché se imposto textColor o textStyle vengono entrambi applicati ai titoli e alle voci di menu. È possibile sovrascrivere textAllCaps in questi stili?

<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> 

Grazie, Jonathan

+0

Stai cercando di creare uno specifico 'TextView' tutto maiuscolo? Se no, allora ti dispiacerebbe dire a tutti cosa stai cercando di fare tutte le maiuscole? Potrebbe non essere necessario impostare il tuo stile così com'è. – adneal

+0

Sicuro. Sto cercando di rendere tutte le TextView visualizzate in Attività tutte maiuscole. Tuttavia, l'effetto collaterale è che ci sono un paio di posti che usano TextViews che ottengono lo stile "tutto maiuscolo", quindi voglio annullare le maiuscole in quelle particolari posizioni. I due posti che attualmente conosco sono i titoli e i popup del menu. –

risposta

8

Utilizzando AppCompattextAllCaps in applicazioni Android di supporto (meno di 14)

Un'opera maggiore di API in giro per questo sarebbe per impostare in modo esplicito lo stile in questo modo:

<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"/> 

o in alternativa utilizzare un nuovo stile che eredi ts textViewStyle e aggiunge l'attributo textAllCaps insieme a tutti gli altri stili della tua scelta:

<style name="MyCompatTextViewStyle" parent="MyTextViewStyle"> 
      <item name="textAllCaps">true</item> 
     </style> 

In Layout:

<android.support.v7.internal.widget.CompatTextView 
      style="@style/MyCompatTextViewStyle" 
      android:id="@+id/text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 

Nota:

1> Questo widget non erediterà alcuna stili predefiniti impostati nel tema tramite android:textViewStyle

2> L'uso di questo widget sembra essere interno il nome del pacchetto indica che non è destinato alle API pubbliche. Inoltre, non è "completamente cotto" in quanto l'attributo textAllCaps deve essere direttamente sullo stile/vista e non può essere nello stile textAppearance perché funzioni.

0

Provare sia con textAllCaps e android:textAllCaps.

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

Ma penso che funzioni solo con la libreria di progettazione 23.2.0 o successiva.

Problemi correlati