2012-06-26 42 views
10

Tôi có một chủ đề nơi muốn tất cả các bản xem trước văn bản về các hoạt động được viết hoa. Vì vậy, tôi đặt textAllCaps trong một phong cách và sau đó áp dụng nó để textViewStyle trong chủ đề của tôi như dưới đâyAndroid textAllCaps in Theme

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

Thật không may này đã có tác dụng phụ của biến Application Tiêu đề của tôi, ActionBar phụ đề, và các mặt hàng popmenu viết hoa. Vì vậy, tôi nghĩ rằng tôi sẽ chỉ đặt các thuộc tính ActionBarStyle, textAppearanceLargePopupMenu và textAppearanceSmallPopupMenu trong chủ đề của tôi để có một kiểu tùy chỉnh với textAllCaps = false. Tuy nhiên, điều này không hoạt động. Tôi biết chủ đề của tôi đang được áp dụng bởi vì nếu tôi đặt textColor hoặc textStyle, cả hai đều được áp dụng cho các tiêu đề và mục menu. Có thể ghi đè lên văn bảnAllCaps trong các kiểu này không?

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

Cảm ơn, Jonathan

+0

Bạn đang cố gắng tạo một "TextView' cụ thể tất cả các mũ? Nếu không, sau đó bạn sẽ nhớ nói với tất cả mọi người những gì nó là bạn đang cố gắng để làm cho tất cả các mũ? Nó có thể không cần thiết để thiết lập phong cách của bạn như là. – adneal

+0

Chắc chắn. Tôi đang cố gắng làm cho tất cả các TextView xuất hiện trên Hoạt động tất cả các mũ. Tuy nhiên, tác dụng phụ là có một vài nơi sử dụng TextViews đang nhận được tất cả kiểu mũ, vì vậy tôi muốn hoàn tác tất cả các nắp ở những vị trí cụ thể đó. Hai nơi mà tôi hiện đang biết là các tiêu đề và các cửa sổ bật lên menu. –

Trả lời

8

Bằng cách sử dụng AppCompattextAllCaps trong Android Apps hỗ trợ API cũ của (dưới 14)

Một tác phẩm xung quanh cho điều này sẽ thiết lập một cách rõ ràng phong cách như thế này:

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

hoặc cách khác sử dụng kiểu mới kế thừa ts textViewStyle và thêm thuộc tính textAllCaps cùng với bất kỳ phong cách khác lựa chọn của bạn:

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

Trong bố cục:

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

Lưu ý:

1> widget này sẽ không thừa hưởng bất kỳ các kiểu mặc định được đặt trong chủ đề của bạn qua android:textViewStyle

2> Sử dụng tiện ích con này có vẻ là gi ven tên gói có nghĩa là nó không thực sự dành cho API công cộng. Nó cũng không được "nướng hoàn toàn" ở chỗ thuộc tính textAllCaps cần phải trực tiếp trên kiểu/xem và không thể ở kiểu textAppearance để nó hoạt động.

0

Hãy thử với cả hai textAllCapsandroid:textAllCaps.

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

Nhưng tôi nghĩ nó chỉ hoạt động với thư viện thiết kế 23.2.0 trở lên.

Các vấn đề liên quan