将微调器添加到ActionBar(不是导航

时间:2012-07-07 18:52:20

标签: android xml layout spinner android-actionbar

我使用答案here中的第二个选项向我的ActionBar添加了一个微调器。

如何将微调器适配器添加到微调器?我尝试使用Spinner对象,因为Google描述了here,但获得了一个空的Spinner对象。

有人知道怎么做吗?我不希望微调器位于操作栏的导航区域中,而是与其他操作项一起使用(我正在使用拆分操作栏)。

感谢您的帮助!

4 个答案:

答案 0 :(得分:29)

我知道这是一个老问题,但万一有人偶然发现它(正如我所做的那样)并且仍在寻找一个完整的答案,这里是如何使用兼容性库来做到这一点,所以它适用于v7 (Android 2.1 Eclair)到当前的v19(Android 4.4 KitKat):

在menu_layout.xml中:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >

  <item android:id="@+id/spinner"
    yourapp:showAsAction="ifRoom"
    yourapp:actionViewClass="android.widget.Spinner" />
</menu>

使用http://schemas.android.com/apk/res-auto名称空间别名作为yourapp,您可以使用旧版Android上不存在的属性showAsAction和actionViewClass。

然后在您的活动代码中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_layout, menu);
    MenuItem item = menu.findItem(R.id.spinner);
    Spinner spinner = (Spinner) MenuItemCompat.getActionView(item);
    spinner.setAdapter(adapter); // set the adapter to provide layout of rows and content
    spinner.setOnItemSelectedListener(onItemSelectedListener); // set the listener, to perform actions based on item selection

Etvoilà!

答案 1 :(得分:15)

我知道你放弃了微调器,但是我会给出一些提示,以防其他人遇到同样的问题,或者你在不同的应用程序中开发相同的模式

  • 如果你得到null是因为你没有正确指定ID。仔细检查身份证。
  • 你通过指定一个只是一个微调器的actionLayout显示复杂内容的链接,你可以指定一个actionViewClass =“android.widget.Spinner”来完成这个伎俩。
  • 然后在你做OnCreateOptionsMenu

    inflater.inflate(R.menu.my_menu, menu); // inflate the menu
    Spinner s = (Spinner) menu.findItem(R.id.my_menu_spinner).getActionView(); // find the spinner
    SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActivity().getActionBar()
            .getThemedContext(), R.array.my_menu_spinner_list, android.R.layout.simple_spinner_dropdown_item); //  create the adapter from a StringArray
    s.setAdapter(mSpinnerAdapter); // set the adapter
    s.setOnItemSelectedListener(myChangeListener); // (optional) reference to a OnItemSelectedListener, that you can use to perform actions based on user selection
    

快乐的编码......

答案 2 :(得分:6)

好吧,我放弃了Spinner使用子菜单的想法。我意识到旋转器是用来选择保持选择的东西;子菜单接缝是一个更好的UI适合。

答案 3 :(得分:-1)

inflater.inflate(R.menu.my_menu, menu); // inflate the menu 

Spinner s = (Spinner) menu.findItem(R.id.my_menu_spinner).getActionView();     // find the spinner 
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActivity().getActionBar() .getThemedContext(), R.array.my_menu_spinner_list, android.R.layout.simple_spinner_dropdown_item);    // create the adapter from a StringArray 
s.setAdapter(mSpinnerAdapter);   // set the adapter 
s.setOnItemSelectedListener(myChangeListener);    // (optional) reference to a OnItemSelectedListener, that you can use to perform actions based on user selection