2012-07-13 50 views
17

Tôi đang sử dụng chủ đề tùy chỉnh kế thừa từ DarkActionBar và tôi muốn tùy chỉnh trình đơn thả xuống thành màu trắng như khi sử dụng chủ đề Light Holo.Tạo menu thả xuống ActionBar

tôi đã có thể thay đổi nền để sử dụng màu trắng:

<style name="MyTheme" parent="@style/Theme.Light.DarkActionBar"> 
    <item name="android:actionDropDownStyle">@style/MyDropDownNav</item> 
</style> 
<style name="MyDropDownNav"> 
    <item name="android:background">@drawable/spinner_background_white</item> 
    <item name="android:popupBackground">@drawable/menu_dropdown_panel_whyite</item> 
    <item name="android:dropDownSelector">@drawable/selectable_background_white</item> 
</style> 

Nhưng tôi không có bất kỳ đầu mối làm thế nào để thay đổi màu sắc văn bản sang màu đen. Bởi vì sau khi thiết lập màu trắng có thể vẽ được vấn đề là văn bản không hiển thị bởi vì là màu trắng trên nền trắng.

Trả lời

21

Tôi tự trả lời sau một số điều tra. Ngoài của câu hỏi phong cách bạn cần phải:

  • Customize android:spinnerDropDownItemStyle cho actionBarWidgetTheme thay đổi đó là văn bản xuất hiện.
  • Cũng đừng quên rằng danh sách thả xuống được quản lý bởi bộ điều hợp bạn sử dụng. Sau đó, nếu bạn sử dụng tiêu chuẩn (simple_dropdown_item_1line) thì không có vấn đề gì. Nhưng nếu bạn sử dụng một tùy chỉnh như tôi (để có thể thêm một biểu tượng) đừng quên áp dụngstyle="?attr/spinnerDropDownItemStyle" trong bố cục TextView của bạn.

Sau đó thức phong cách tùy chỉnh là:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 

<style name="Theme.myapp" parent="@style/Theme.Light.DarkActionBar"> 
    <item name="android:actionDropDownStyle">@style/myapp_DropDownNav</item>   
    <item name="android:actionBarWidgetTheme">@style/myapp.actionBarWidgetTheme</item> 
</style> 

<style name="myapp.actionBarWidgetTheme" parent="@style/Theme."> 
    <item name="android:spinnerDropDownItemStyle">@style/myapp.Widget.DropDownItem.Spinner</item> 
</style> 

<style name="myapp_DropDownNav" parent="@style/Widget.Spinner.DropDown.ActionBar"> 
    <item name="background">@drawable/spinner_background_ab_myapp</item> 
    <item name="android:background">@drawable/spinner_background_ab_myapp</item> 
    <item name="android:popupBackground">@drawable/menu_dropdown_panel_myapp</item> 
    <item name="android:dropDownSelector">@drawable/selectable_background_myapp</item> 
</style> 

<style name="myapp.Widget.DropDownItem.Spinner" parent="Widget.DropDownItem.Spinner"> 
    <item name="android:textAppearance">@style/myapp.TextAppearance.Widget.DropDownItem</item> 
</style> 

<style name="myapp.TextAppearance.Widget.DropDownItem" parent="TextAppearance.Widget.DropDownItem"> 
    <item name="android:textColor">@color/black</item> 
</style> 

đâu drawables trong myapp_DropDownNav là những nền trắng mà bạn có thể tạo ra với ActionBar Style generator trong Android Asset Studio

+5

Không hoạt động trong API 19 –

0

Lời khuyên của tôi là chỉ cần kế thừa từ chủ đề Sherlock.Light và thay đổi các trường áp dụng thành các giá trị Dark. Đối với ứng dụng của tôi, chúng tôi muốn có biểu tượng "lên" màu trắng và văn bản màu trắng cho các nhãn hành động. Tôi không cung cấp các phiên bản tối của các biểu tượng trên thanh tác vụ của tôi, vì vậy tất cả đều là màu trắng. Vì vậy, sau vài giờ rối tung xung quanh với nó và làm theo các đề xuất của người khác nhau, cuối cùng tôi đã tìm thấy những gì tôi đang tìm kiếm trong tập tin chủ đề ABS.

tôi kế thừa từ Sherlock.Light (tốt, về mặt kỹ thuật HoloEverywhereLight.Sherlock nhưng ...) và thay đổi:

<item name="android:actionMenuTextColor">@color/White</item> 
<item name="actionMenuTextColor">@color/White</item> 
<item name="android:homeAsUpIndicator">@drawable/abs__ic_ab_back_holo_dark</item> 
<item name="homeAsUpIndicator">@drawable/abs__ic_ab_back_holo_dark</item> 
<item name="android:dividerVertical">@drawable/abs__list_divider_holo_dark</item> 
<item name="dividerVertical">@drawable/abs__list_divider_holo_dark</item> 

Vậy là xong. Đó là cách đơn giản và dễ dàng hơn là cố gắng mở rộng các lớp học, khôi phục mọi thứ trong mã, v.v.

2

Tôi đã vấp phải những gì có thể là cách đơn giản nhất để thực hiện việc này. Tôi đã làm việc với thư viện AppCompat.

<style name="ApplicationTheme" parent="@style/Theme.AppCompat"> 
    <item name="android:actionBarWidgetTheme">@style/Theme.AppCompat.Light</item> 
    <item name="actionBarWidgetTheme">@style/Theme.AppCompat.Light</item> 
</style> 
+0

Excelent! Nhưng tôi nghĩ rằng nó sẽ chỉ làm việc với các chủ đề Light.DarkActionBar. – rubenlop

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