【问题标题】:ActionView/Spinner with match_parent in action bar动作栏中带有 match_parent 的 ActionView/Spinner
【发布时间】:2015-02-04 14:45:24
【问题描述】:

我需要操作栏中的微调器来过滤内容,看起来类似于:

但微调器应该填满整个操作栏。

我尝试了什么:

1)actionBar.setListNavigationCallbacks(navigationAdapter, this);

是的,它有效。但我只在 1 个片段中需要这个过滤器。是的,我只能在这个片段中使用ActionBar.NAVIGATION_MODE_LIST,而在其他片段中将其更改为ActionBar.NAVIGATION_MODE_STANDARD。但是,如果我想在另一个片段中添加差异过滤器。所以,我应该在每个片段中设置类型、适配器等。非常非常糟糕。

2) 更好的解决方案是使用菜单。在片段的onCreateOptionsMenu 中,我只能在我需要的片段中添加带有actionViewClass="android.widget.Spinner" 的项目。几乎是一个不错的解决方案,只是这个项目会右对齐并且不会填满整个操作栏。

那么,我的问题是:如何使菜单项填充完整的动作蝙蝠长度? 或者你能建议更好的解决方案吗?

顺便说一句,setCustomView 用于 ActionBar - 与 setListNavigationCallbacks... 的原因相同的错误解决方案...

【问题讨论】:

    标签: android android-actionbar android-spinner


    【解决方案1】:

    找到解决方案。您应该使用自己的微调项目布局。

    代替:

    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_itemRelativeLayoutandroid: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) {
    
            }
        });
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多