Другой вид / стиль для конкретного пункта меню на панели действий - PullRequest
6 голосов
/ 22 декабря 2011

В своем приложении для Android я настраиваю ActionBar, следуя советам из блога разработчика Android и других мест.Я хотел бы иметь возможность выделить конкретный пункт меню на панели действий, например, с другим цветом фона, потому что он особенно применим к видимому в данный момент фрагменту (который фактически добавил его).Однако я не нашел никаких указаний на то, что это можно сделать, и мне пока не удалось этого сделать самому.Является ли это возможным?Если так, то как?

1 Ответ

13 голосов
/ 23 декабря 2011

Итак, я заставил это работать сейчас с небольшим фокусом. Здесь идет фрагмент кода

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    menuItemCreateCart = menu.findItem(R.id.menuItemCreateCart);
    if (menuItemCreateCart  == null) {
        menuItemCreateCart  = menu.add(0, R.id.menuItemCreateCart, 0, R.string.Create);
    }

    TextView tv = new TextView(getActivity());
    tv.setText(R.string.Create);
    tv.setTextColor(getResources().getColor(R.color.green));
    tv.setBackgroundColor(getResources().getColor(R.color.lightBlue));
    tv.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    createCart();
                }
            }
    );
    menuItemCreateCart.setActionView(tv);

Основная проблема заключается в том, что onclicklistener должен быть настроен на вид, который вы задали как вид действия, а не пункт меню, чтобы он работал. Таким образом, вы можете делать все что угодно.

Также обратите внимание, что вы НЕ можете использовать getActionView для получения первоначально установленного представления с заголовком, потому что оно вернет ноль. Похоже, что это скорее альтернативный вид, чем фактический вид для пунктов меню по умолчанию.

...