Android — добавьте счетчик в заголовок ActionBar

Я хочу добавить Spinner, который будет открываться, когда я нажимаю на заголовок Activity в ActionBar (я не использую Toolbar, я использую поддержку ActionBar).

Я пробовал использовать метод setListNavigationCallbacks(SpinnerAdapter adapter, ActionBar.OnNavigationListener callback) на панели действий. Он работает, но отображает выбранный элемент рядом с заголовком.

Код действия при создании

actionBar.setTitle("Title");
actionBar.setNavigationMode(NAVIGATION_MODE_LIST);
actionBar.setListNavigationCallbacks(spinnerAdapter, null);
// spinnerAdapter contains simply numbers from 1 to 10

Я знаю, что использование этих методов и поддержка ActionBar вместо панели инструментов устарели, но изменение ActionBar с помощью панели инструментов в моем проекте будет иметь огромные последствия, и мне предстоит много работы...

Я не хочу использовать какую-либо внешнюю библиотеку, если это возможно, так как это, очевидно, не очень сложно сделать.

Благодарю вас!




Ответы (1)


Во-первых, вам нужно создать xml-файл в папке res/menu/ и добавить пункт меню с идентификатором, именем, actionViewClass. Файл пункта меню будет выглядеть следующим образом.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/spinner"
    android:title="ActionBar Spinner"
    app:actionViewClass="android.widget.Spinner"
    android:background="#ff00"
    app:showAsAction="always" />
</menu>

Откройте файл активности Java, перейдите к методу onCreateOptionMenu, если он уже есть, а если нет, то переопределите новый метод, называемый onCreateOptionMenu, и свяжите его с файлом элемента меню счетчика с помощью getMenuInflater. И установите адаптер для класса элемента меню счетчика. Файл активности Java будет выглядеть следующим образом.

public class SpinnerAndroidActionBarToolBar extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.android_actionbar_toolbar_spinner_example_layout);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.android_action_bar_spinner_menu, menu);
        MenuItem item = menu.findItem(R.id.spinner);
        Spinner spinner = (Spinner) MenuItemCompat.getActionView(item);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.spinner_list_item_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        return true;
    }
}
person Vaibhav Taunk    schedule 23.08.2017
comment
Спасибо за ваш ответ, но это только добавит счетчик справа на панели действий... Я хочу, чтобы счетчик открывался, когда я нажимаю на заголовок панели действий, а не на действие панели действий. - person Youb; 24.08.2017