2012-07-09 30 views
15

Tôi đã thử một lúc để tạo kiểu cho các mục trong danh sách thả xuống mà tôi đã thêm vào Thanh tác vụ, nhưng tôi không thể tìm ra đúng mã.Tạo kiểu Sherlock Action Bar thả xuống các mục

Tôi đã thử xem xét abs__styles.xmlabs__themes.xml trong dự án SherlockActionBar nhưng không có mục nào tôi thêm vào dự án của tôi đã hoạt động.

Con đường tôi đang tạo ra các menu như sau:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Sharing icons 
     SubMenu submenu = menu.addSubMenu(null); 
     submenu.add(getResources().getString(R.string.twitter)); 
     submenu.add(getResources().getString(R.string.facebook)); 
     submenu.add(getResources().getString(R.string.email)); 

     // Share button itself 
     MenuItem ShareButton = submenu.getItem(); 
     ShareButton.setIcon(R.drawable.icon_share_triangle); 
     ShareButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

     // Twitter submenu button 
     MenuItem TwitterItem = submenu.getItem(0); 
     TwitterItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
     TwitterItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { 
      public boolean onMenuItemClick(MenuItem item) { 
       setShareTwitterIntent(); 
       return true; 
      } 
     }); 
... 
} 

Tôi cũng đã cố gắng tham gia một cái nhìn tại post này bằng cách sử dụng đoạn mã sau, nhưng vẫn không có may mắn:

<!-- style the list navigation --> 
<style name="MyDropDownNav" parent="android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar"> 
    <item name="android:background">@drawable/ad_spinner_background_holo_light</item> 
    <item name="android:popupBackground">@drawable/ad_menu_dropdown_panel_holo_light</item> 
    <item name="android:dropDownSelector">@drawable/ad_selectable_background</item> 
</style> 

tôi chỉ cần thay đổi màu nền của các mục trong danh sách thả xuống.

Cảm ơn rất nhiều sự giúp đỡ của bạn!

EDIT:

Tôi cũng đã cố gắng này, và nó vẫn không hoạt động:

<item name="android:actionDropDownStyle">@style/MyApp.DropDownNav</item> 
<item name="actionDropDownStyle">@style/MyApp.DropDownNav</item> 
... 
<style name="MyApp.DropDownNav" parent="Widget.Sherlock.Light.Spinner.DropDown.ActionBar"> 
     <item name="android:background">@drawable/sharing_panel</item> 
</style> 
+0

Chủ đề tùy chỉnh của bạn có xuất phát từ Chủ đề.Holo.Light.DarkActionBar không? –

+0

Bạn đã giải quyết được sự cố chưa? – Spike

+0

điều này đã bị trì hoãn trong dự án của tôi vì nó là ưu tiên thấp, nhưng ngay sau khi tôi sửa nó, tôi sẽ cho các bạn biết .. – noloman

Trả lời

27

Tôi đã có cùng một vấn đề và sau rất nhiều đầu gãi - các loại gãi như một con chó với một trường hợp xấu của bọ chét - Tôi đã nhận nó để làm việc. Điều này là với ABS 4.1 (90). Mã dưới đây sẽ thay đổi màu nền của mục thả xuống.

SomeActivity.java

Context context = ab.getThemedContext(); 
ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(
    context, R.array.map_activity_view_list, 
    R.layout.sherlock_spinner_item); 
list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item); 

Lưu ý: Bạn sử dụng R.layout.sherlock_spinner_item cho createFromResource và R.layout.sherlock_spinner_dropdown_item cho setDropDownViewResource. Đây là những gì xuất hiện trong mẫu trong nguồn ABS: https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/demos/src/com/actionbarsherlock/sample/demos/ListNavigation.java

Điều này là do thả xuống không được chọn trong thanh hành động khi nào là bố trí sherlock_spinner_item và các mục thả xuống thực tế sử dụng cách bố trí sherlock_spinner_dropdown_item có nghĩa là phong cách khác nhau đối với mỗi:

  • sherlock_spinner_item
    • android: spinnerItemStyle
    • spinnerItemStyle
  • sherlock_spinner_dropdown_item
    • android: spinnerDropDownItemStyle
    • spinnerDropDownItemStyle

Ghi cả hai phong cách là cần thiết - android: tiền tố phong cách cho cho ActionBar ICS có nguồn gốc và phong cách mà không có sự cho android : tiền tố dành cho kiểu AcrionBarSherlock trên các thiết bị cũ hơn ICS.

res/values ​​/ styles.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.MyApp" parent="Theme.Sherlock.Light"> 
     <!-- the text when loading --> 
     <!-- 
     <item name="actionBarStyle">@style/Widget.MyApp.ActionBar</item> 
     <item name="android:actionBarStyle">@style/Widget.MyApp.ActionBar</item> 
     --> 

     <!-- the dropdown items --> 
     <item name="android:spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item> 
     <item name="spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item> 

     <!-- the action bar dropdown menu item --> 
     <!-- 
     <item name="android:spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item> 
     <item name="spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item> 
     --> 
    </style> 

    <style name="Widget.MyApp.ActionBar" parent="Widget.Sherlock.Light.ActionBar"> 
     <item name="titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item> 
     <item name="android:titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item> 
    </style> 

    <style name="Widget.MyApp.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title"> 
    <item name="android:textColor">@color/orange</item> 
    </style> 

    <style name="MyApp.Widget.Holo.DropDownItem" parent="Widget.Sherlock.Light.DropDownItem.Spinner"> 
     <item name="android:background">@color/orange</item> 
    </style> 

    <style name="MyApp.Widget.Holo.SpinnerItem" parent="Widget.Sherlock.TextView.SpinnerItem"> 
     <item name="android:background">@color/orange</item> 
    </style> 

</resources> 

res/values ​​/ color.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<color name="orange">#ffEf4f1f</color> 

</resources> 

Vui lòng đánh dấu là câu trả lời nếu điều này giải quyết được điều đó cho bạn. Cảm ơn!

Links:

Duyệt phong cách:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__styles.xml

Duyệt chủ đề:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__themes.xml

+2

không có nó không hoạt động như bạn nói. Tuy nhiên tôi đã cập nhật bài đăng của mình cho thấy cách tôi tạo menu. – noloman

+0

Lạ lùng, nó làm việc cho tôi trong dự án của tôi. Có lẽ có những thay đổi khác trong phong cách/chủ đề của bạn đang ảnh hưởng đến nó. –

+0

Chìa khóa cho tôi là sử dụng getThemedContext() thay vì chỉ chuyển hoạt động. Cảm ơn! – phreakhead

0

ActionBarSherlock đòi hỏi bạn phải sử dụng một trong 3 chủ đề của nó. Bạn có thể mở rộng cho họ mặc dù, và ghi đè kiểu thả xuống, như thế này:

<style name="MySherlockLightTheme" parent="Theme.Sherlock.Light"> 
    <item name="actionDropDownStyle">@style/MyDropDownNav</item> 
</style> 

này là giả sử bạn muốn chủ đề ánh sáng holo, và phong cách thả xuống của bạn là MyDropDownDav.

Sau đó, trong mã của bạn, bạn chỉ cần chuyển sang sử dụng chủ đề của mình (trong tệp kê khai hoặc thực hiện trong Hoạt động trênCreate).

+0

Đảm bảo bạn cũng đặt ' @ style/MyDropDownNav 'để thanh tác vụ gốc sẽ sử dụng nó trên tổ ong và sau đó. – Karakuri

+0

Tôi đã thực hiện nhưng nó vẫn không hoạt động, không có sự khác biệt .. – noloman

4

Để thay đổi drawable nền của menu item trong Sherlock Action Bar (v4. 1.0), sử dụng các mục sau:

<style name="My_Theme" parent="Theme.Sherlock"> 
    <item name="android:popupMenuStyle">@style/MyApp.PopupMenuStyle</item> 
    <item name="popupMenuStyle">@style/MyApp.PopupMenuStyle</item> 
</style> 

<style name="MyApp.PopupMenuStyle" parent="Widget.Sherlock.ListPopupWindow"> 
    <item name="android:popupBackground">@drawable/menu_item_background</item> 
</style> 

hy vọng điều này sẽ hữu ích.

3

tôi được sử dụng này, và công việc của mình cho tôi

<style name="MyDropDownItem" parent="Widget.Sherlock.Spinner.DropDown.ActionBar"> 
    <item name="android:background">@drawable/spinner_background_holo_light</item> 
    <item name="android:popupBackground">@color/actionbar_normal</item> 
    <item name="android:dropDownSelector">@drawable/list_selector_holo_light</item> 
</style> 

<style name="myTheme" parent="@style/Theme.Sherlock"> 
    ... 
    ... 
    ... 
    <item name="android:actionDropDownStyle">@style/MyDropDownItem</item> 
    <item name="actionDropDownStyle">@style/MyDropDownItem</item> 
</style> 

nơi,

"spinner_background_holo_light" và "list_selector_holo_light" là selectors

"actionbar_normal" drawable (hình ảnh HOẶC màu)

2

Tôi không chắc chắn liệu câu hỏi này đã được trả lời một cách thỏa đáng, nhưng tôi đã gặp phải vấn đề này và không tìm thấy câu trả lời mà tôi thích.Có vẻ như tôi đã có một cấu hình khá chuẩn của ActionBarSherLock và sử dụng điều hướng thả xuống đã cho tôi một số kết quả không tốt trong hộp. Văn bản màu đen trên nền đen. Tôi muốn làm cho văn bản màu trắng. Dưới đây là cách tôi thực hiện nó:

Đối với người mới bắt đầu, chủ đề cơ sở ứng dụng của tôi kéo dài Theme.Sherlock:

<style name="AppBaseTheme" parent="Theme.Sherlock"> 
</style> 

chủ đề ứng dụng thực tế của tôi AppTheme mở rộng cơ sở của tôi (Tôi không thể nhớ tại sao tôi đã làm điều này tại thời gian, nó có khả năng không cần thiết).

<style name="AppTheme" parent="AppBaseTheme"> 
    <item name="spinnerItemStyle">@style/SpinnerItemStyle</item> 
    <item name="android:spinnerItemStyle">@style/SpinnerItemStyle</item> 
</style> 

tôi cần phải ghi đè Widget.Sherlock.TextView.SpinnerItem và do đó như sau:

<style name="SpinnerItemStyle" parent="Widget.Sherlock.TextView.SpinnerItem"> 
<item name="android:textAppearance">@style/TextAppearance.MySpinnerItem</item> 
</style> 

Lý do để làm điều này là để truy cập các widget TextApperance: TextAppearance.Sherlock.Widget.TextView.SpinnerItem

này được ghi đè như sau:

<style name="TextAppearance.MySpinnerItem" parent="TextAppearance.Sherlock.Widget.TextView.SpinnerItem"> 
    <item name="android:textColor">#FFFFFF</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:textStyle">normal</item> 
</style> 

Sai lầm lớn nhất của tôi khi buộc phải lấy ông văn bản trong cố gắng để sửa lỗi này đã cố gắng để trực tiếp thiết lập textColor trong SpinnerItemStyle ghi đè. Vì nó đã sử dụng một widget textAppearance nên nó không hoạt động.

Sau đó, mã của tôi để làm cho công việc này có vẻ như thế này (trong phương pháp onCreate hoạt động của tôi):

SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromResource(this, 
      R.array.call_type, R.layout.sherlock_spinner_item); 

OnNavigationListener onNavigationListener = new OnNavigationListener() { 
     // Get the same strings provided for the drop-down's ArrayAdapter 
     String[] strings = getResources().getStringArray(R.array.call_type); 

     @Override 
     public boolean onNavigationItemSelected(int position, long itemId) { 
      String filter = strings[position]; 
      filterCalls(filter); 
      return true; 
     } 
    }; 

ActionBar actionBar = getSupportActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
    actionBar.setListNavigationCallbacks(spinnerAdapter, 
      onNavigationListener); 

Điều này cho phép tôi để thay đổi màu sắc của văn bản, trên thả spinner xuống bằng ActionBarSherlock.

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