我需要在Action Bar中使用微调器来过滤内容,看起来类似于:
但是旋转器应该填满整个动作栏。
我尝试了什么:
1)actionBar.setListNavigationCallbacks(navigationAdapter, this);
是的,它有效。但我只需要1个片段中的这个过滤器。是的,我只能在此片段中使用ActionBar.NAVIGATION_MODE_LIST
,并在其他片段中将其更改为ActionBar.NAVIGATION_MODE_STANDARD
。但是,如果我想在另一个片段中添加differenat过滤器。所以,我应该在每个片段中设置类型,适配器等。非常非常非常。
2)更好的解决方案是使用菜单。在片段的onCreateOptionsMenu
中,我只能在需要此片段的片段中添加actionViewClass="android.widget.Spinner"
项。几乎不错的解决方案,除了这个项目将正确对齐并且不填充完整的操作栏。
所以,我的问题是:如何让菜单项填充完整动作蝙蝠长度? 或者你能建议更好的解决方案吗?
Btw,setCustomView
用于ActionBar - 由于与setListNavigationCallbacks
...
答案 0 :(得分:0)
找到解决方案。您应该为微调器项目使用自己的布局。
而不是:
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.projects_filteres, android.R.layout.simple_spinner_item);
使用:
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.projects_filter_item,
android.R.id.text1, getActivity().getResources().getStringArray(R.array.projects_filteres));
其中R.array.projects_filteres
- 只是来自资源的简单数组,而R.layout.projects_filter_item
是RelativeLayout
android:layout_width="match_parent"
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="fill_horizontal"
android:orientation="vertical" >
<TextView
android:textColor="#000"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
因此,片段中onCreateOptionsMenu
的整个代码看起来像这样:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.action_bar_context_menu, menu);
android.view.MenuItem filter = menu.findItem(R.id.context_menu_filter);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.projects_filter_item,
android.R.id.text1, getActivity().getResources().getStringArray(R.array.projects_filteres));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = (Spinner)MenuItemCompat.getActionView( filter);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}