it-swarm.com.ru

Android Lollipop, добавить всплывающее меню из заголовка на панели инструментов

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

Toolbar Popup From Title

45
Matt Wear

Вам нужно будет добавить Spinner на панель инструментов:

<Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_height="?attr/actionBarSize"
        Android:layout_width="match_parent"
        Android:background="?attr/colorPrimary">

    <Spinner
            Android:id="@+id/spinner_nav"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />

</Android.support.v7.widget.Toolbar>

Затем вам нужно будет отключить заголовок по умолчанию:

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);

Затем вы можете получить и настроить Spinner по мере необходимости в вашей деятельности/фрагменте.

96
Chris Banes

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

activity_main.xml

<LinearLayout 
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"

Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:fitsSystemWindows="true">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorAccent" />

</Android.support.design.widget.AppBarLayout>

 <!-- Other layout widgets -->

</LinearLayout>

menu_main.xml

<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="Spinning"
    app:actionViewClass="Android.widget.Spinner"
    app:showAsAction="always" />

<!-- Other items -->

</menu>

Ваша деятельность

Необходимо переопределить метод onCreateOptionMenu () , а затем использовать getMenuInflater () , чтобы накачать файл меню, созданный ранее. 

Вам также нужно будет получить предмет Spinner и установить на него адаптер, как вы это обычно делаете.

   @Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_main, menu);

    //Get Spinner item from menu

    MenuItem spinnerMenuItem = menu.findItem(R.id.spinner);
    final Spinner spinner = (Spinner) MenuItemCompat.getActionView(spinnerMenuItem);

    //Set adapter whichever way you prefer (from the resource or manually)

    final ArrayAdapter<CharSequence> spinnerAdapter = ArrayAdapter
            .createFromResource(this, R.array.items_array, Android.R.layout.simple_spinner_dropdown_item);
    spinnerAdapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(spinnerAdapter);

    return true;

}

Style.xml

Наконец, если вы хотите настроить свой счетчик

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="Android:spinnerStyle">@style/spinner_style</item>
</style>

<style name="spinner_style" parent="Widget.AppCompat.Spinner">
    <item name="Android:dropDownVerticalOffset">40dip</item>
    <!--<item name="Android:dropDownHorizontalOffset">0dip</item>-->
    <item name="overlapAnchor">false</item>

    <!--Other customizations-->

</style>

0
Ruan_Lopes