Android - 在ActionBar标题上添加微调器

时间:2017-08-23 09:13:21

标签: android android-actionbar spinner android-spinner android-actionbar-compat

我愿意添加一个Spinner,当我点击ActionBar中的活动标题时我会打开它(我不会使用Toolbar,我使用支持ActionBar)。

我尝试使用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 个答案:

答案 0 :(得分:0)

首先,您必须在res / menu /文件夹中创建一个xml文件,并添加一个id,name,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方法,如果没有,则覆盖名为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;
    }
}