我正在尝试添加' Spinner '在我的Android App中使用AppCompatActivity的 OPTIONS MENU 中。
在我准备的示例中,我希望微调器提供下拉列表选项列表,例如'全部/成功/失败'。
按照StackOverflow其他地方的说明,我可以将微调器添加到操作栏,但它看起来很奇怪。我希望微调器与动作栏项目的外观相匹配,在我的情况下意味着操作栏上的标题应该是白色,当我点击微调器时,弹出窗口应该有白色背景和黑色测试就像溢出选项菜单。
请参阅下面的截图,了解我目前的外观。
Image of collapsed and expanded spinner menu item
正如您所看到的,问题是当操作栏项的其余部分为白色时,微调器选择显示为黑色。类似地,当单击微调器时,下拉列表中的项目具有带黑色文本的深色背景,而其余菜单项(例如溢出菜单)具有带黑色文本的浅色背景。
我通过执行以下操作添加了此微调器:
步骤1:在菜单xml中添加了菜单项:
<item android:id="@+id/spinner"
app:showAsAction="always"
android:title="Filter"
app:actionViewClass="android.widget.Spinner" />
第2步:在我的Activity(在本例中为Fragment)菜单扩展代码中,添加了以下内容:
String [] adapterValues = new String[]{"All", "Successful", "Failed"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, adapterValues);
MenuItem item = menu.findItem(R.id.spinner);
Spinner spinner = (Spinner) MenuItemCompat.getActionView(item);
spinner.setAdapter(adapter);
已尝试解决方案:
所以在我的数组适配器中,我创建并提供了我的所有者布局,而不是使用默认的微调器布局,如下所示:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), R.layout.actionbar_spinner_filter, R.id.spinner_text, adapterValues);
相应的布局文件是:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="16dp"
android:background="@android:color/white"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/spinner_text"
/>
</LinearLayout>
这给了我以下结果,正如你所看到的,这些都很奇怪。
Image of collapsed and expanded spinner menu
问题摘要:
由于
答案 0 :(得分:1)
在菜单xml文件中执行以下操作:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app.polar="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/item0"
app.polar:showAsAction="always"
android:icon="@drawable/some_icon"
android:title="@string/some_title"/>
<item
android:id="@+id/item1"
app.polar:showAsAction="always"
android:icon="@drawable/some_icon"
android:title="@string/some_title">
<menu
android:id="@+id/submenu1">
<item
android:id="@+id/item11"
app.polar:showAsAction="never"
android:title="@string/some_submenu_title"/>
<item
android:id="@+id/item12"
app.polar:showAsAction="never"
android:title="@string/some_submenu_title"/>
<item
android:id="@+id/item13"
app.polar:showAsAction="never"
android:title="@string/some_submenu_title"/>
</menu>
</item>
</menu>
在您的活动中执行以下操作:
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.yourmenu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.item0:{
//do something
return true;
}
case R.id.item11:{
//do something
return true;
}
case R.id.item12:{
//do something
return true;
}
case R.id.item13:{
//do something
return true;
}
}
return super.onOptionsItemSelected(item);
}
如果这样做,子菜单的样式将始终与正常的操作栏溢出菜单相同。