2013-02-13 2 views
4

Мне нужно сделать полностью пользовательские пункты меню переполнения (разные цвета фона, как показано на рисунке).Элементы меню переполнения элементов меню в режиме действия

https://dl.dropbox.com/u/7771649/overflow.png

Возможно ли это?

+0

Это [можно изменить цвет * все * пункты меню переполнения] (https://groups.google.com/forum/?fromgroups#!topic/actionbarsherlock/5lHOKNlXn_4), но я не верю их можно установить индивидуально. – Eric

+0

Но для каждого элемента мне нужны разные стили. Я знаю один способ сделать это - PopupWindow с собственным макетом. Но это не так элегантно, как всплывающее меню в панели действий. – user2069363

+0

Вы можете достичь этой настройки адаптера вашего списка действий. В адаптере вы можете установить различные цвета фона. –

ответ

0

Вы можете настроить собственное представление для каждого элемента MenuItem.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    menu.add("test").setActionView(R.layout.custom_action_menu_item); 
    return super.onCreateOptionsMenu(menu); 
} 

http://developer.android.com/reference/android/view/MenuItem.html#setActionView%28int%29

+2

Он работает, когда MenuItem отображается в панели действий. Но не работает, когда пункт меню внутри меню переполнения. – user2069363

5

В последний день я должен реализовать Bar Action Sherlock.And мой случай был такой же, как ваша. У меня есть реализовать адаптер для моей навигации List.Let сказать:

public class MyNavigationAdapter extends BaseAdapter { 
    Context mContext = null; 
    String[] mTitles; 
    LayoutInflater mLayOutInflater = null; 

    public MyNavigationAdapter(Context context, String[] titles) { 
     this.mContext = context; 
     this.mTitles = titles; 
     mLayOutInflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     return mTitles.length; 
    } 

    @Override 
    public Object getItem(int arg0) { 
     return null; 
    } 

    @Override 
    public long getItemId(int arg0) { 
     return 0; 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup parent) { 
     if (view == null) 
      view = mLayOutInflater.inflate(R.layout.my_list_custom_row, parent,false); 
     TextView rowName = (TextView) view.findViewById(R.id.title); 
     rowName.setText(mTitles[position]); 
     rowName.setBackground(your desire drawle);// yo 

u can also set color etc. 
//OR 

if(position%2==0) 
     rowName.setBackgroundColor(Color.RED); 
     else 
      rowName.setBackgroundColor(Color.BLUE); 
     return view; 
    } 

} 

После этого, вы должны написать эти строки кода в вашей деятельности OnCreate Митос.

ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
actionBar.setListNavigationCallbacks(mNavigationAdapterObj, mNavigationListner); 

для получения дополнительной информации

исчезнет, ​​проконсультироваться here.
+0

Хорошее решение! Но я предпочитаю это: http://stackoverflow.com/a/14123377/2069363 Потому что это позволяет мне создавать прядильщик с иконкой меню переполнения в том же месте, что и в оригинальном меню переполнения. – user2069363

+0

Да, вы также можете добавить значок, если хотите. Я могу обновить свой ответ для значков, если вы хотите. –

+0

Это же решение, основная тема такая же. Примите мой ответ. –

0

Это один https://stackoverflow.com/a/14123377/2069363 работает для меня!

Вы можете создать такое поведение, используя Spinner (или IcsSpinner для ActionBarSherlock) в макете действия элемента меню. Хотя вам нужно использовать небольшой трюк - скрыть выбранный элемент.

Смежные вопросы