【问题标题】:How to add a spinner next to a menu in the toolbar如何在工具栏中的菜单旁边添加微调器
【发布时间】:2018-05-08 23:04:16
【问题描述】:

我希望我的微调器位于工具栏中的菜单旁边(菜单左侧),但目前微调器显示在菜单下方。我是否必须以某种方式将其添加到onCreateOptionsMenu(Menu menu)

我的活动:

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

 Spinner spinner = (Spinner) findViewById(R.id.travelType_spinner);
        // Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.travelType_array, R.layout.spinner_item);
        // Specify the layout to use when the list of choices appears
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // Apply the adapter to the spinner
        if (spinner != null) {
            spinner.setAdapter(adapter);
        }

布局:

<android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

        <Spinner
            android:id="@+id/travelType_spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </android.support.design.widget.AppBarLayout>

Spinner_item.xml

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/whiteText"
    android:textStyle="bold"
    android:padding="15dp"/>

【问题讨论】:

  • 检查一次布局文件。您的微调器标签应该在工具栏标签之间,而不是在它结束之后。

标签: android drop-down-menu android-spinner android-toolbar


【解决方案1】:

添加菜单项

<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

@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) item.getActionView();

        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;
    }

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimaryDark"
    android:minHeight="?attr/actionBarSize"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
     >

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

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

【讨论】:

  • 我们如何为微调器添加 onItemSelectedListener ?
  • 在添加自定义列表的情况下将适配器部分更改为List&lt;customType&gt; myList = //your data here; ArrayAdapter&lt;customType&gt; adapter= new ArrayAdapter&lt;customType&gt;(this , android.R.layout.simple_spinner_item , myList);
  • 嘿,它只为我显示微调箭头,但图标不再显示
【解决方案2】:

除了上述答案之外,您的活动需要实现 onItemSelectedListener,并在 onItemSelected 方法中完成您的工作。

您还需要告诉正在监听的微调器,在 onCreateOptionsMenu 中添加以下行:

spinner.setOnItemSelectedListener(this);

这将导致您的微调器调用活动的 onItemSelected 方法。

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 2016-05-21
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多