动作栏中带有match_parent的ActionView / Spinner

时间:2015-02-04 14:45:25

标签: android android-actionbar android-spinner

我需要在Action Bar中使用微调器来过滤内容,看起来类似于:

enter image description here

但是旋转器应该填满整个动作栏。

我尝试了什么:

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 ...

相同的原因导致的解决方案不好

1 个答案:

答案 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_itemRelativeLayout 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) {

        }
    });

}