Android ActionBar / ActionBarSherlock多选择微调

我有一个ListView包含属于一个或多个类别的项目。 我希望通过点击操作栏中的图标来选择和取消选择这些类别。 这样,listView将根据所选类别进行刷新。

这是我发现的一个例子:

581753Screenshot20140110103007.png http://www.hostingpics.net/viewer.php?id=581753Screenshot20140110103007.png

目前,我发现了两个解决方案:

  • 添加一个带有可选项目的微调器,但它会在每次选择/取消选择时关闭菜单
  • 在RelativeLayout中创建一个带可打包项目的ListView,并在点击图标时出现。
  • 第二种解决方案完全符合用户界面的期望,但我认为有多种选择微调解决方案。


    Spinner使用ListPopupWindow显示下拉菜单,您可以使用相同的方式显示多项选择列表:

    private void showPopup() {
        final ListPopupWindow lpw = new ListPopupWindow(this);
        lpw.setAdapter(/*Your adapter here*/);
        lpw.setAnchorView(mAnchor); // see below
        lpw.setContentWidth(/*specific value*/); // see below
        lpw.show();
        // this is required because the popup's `ListView` will not be available 
        // until the ListPopupWindow is actually shown.
        mAnchor.post(new Runnable() {
            @Override
            public void run() {
                lpw.getListView().setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
            }
        });
    }
    

    然后,当选择了正确的MenuItem时,您可以从onOptionsItemSelected()回调中调用此方法。 还有两件事你需要注意:

    mAnchor是一个View ,需要在右上角的Activity布局中插入,以便ListPopupWindow显示在正确的位置。 例如,如果您有一个Activity根目录:

    一个RelativeLayout然后mAnchor将是:

    mAnchor = new View(this);
    RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(0, 0);
    rlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
    rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
    mAnchor.setLayoutParams(rlp);
    // add mAnchorView first to the RelativeLayout
    

    一个LinearLayout然后mAnchor将是:

    mAnchor = new View(this);
    LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(0, 0);
    llp.gravity = Gravity.RIGHT;
    mAnchor.setLayoutParams(llp);
    // add mAnchorView first to the LinearLayout(assuming orientation vertical)
    

    等等其他类型的布局。

    其次,您需要将ListPopupWindow的宽度设置为所需的值。 您需要针对不同的屏幕尺寸和方向调整此值(如手机纵向和手机横向,纵向和横向不同的桌面尺寸)。


    原始指南可在http://developer.android.com/guide/topics/ui/actionbar.html#Dropdown中找到

    添加下拉式导航


    图片

    图9.操作栏中的下拉导航列表。

    作为您的活动的另一种导航(或过滤)模式,操作栏提供内置下拉列表(也称为“微调器”)。 例如,下拉列表可以提供活动内容排序的不同模式。

    在更改内容非常重要但不一定经常出现的情况下,使用下拉列表非常有用。 在切换内容更频繁的情况下,您应该改用导航标签。

    启用下拉导航的基本步骤是:

  • 创建一个SpinnerAdapter,它提供下拉列表中的可选项目以及在列表中绘制每个项目时使用的布局。
  • 实现ActionBar.OnNavigationListener以定义用户从列表中选择项目时发生的行为。
  • 在您的活动的onCreate()方法期间,通过调用setNavigationMode(NAVIGATION_MODE_LIST)来启用操作栏的下拉列表。
  • 使用[setListNavigationCallbacks()]设置下拉列表的回调(http://developer.android.com/reference/android/support/v7/app/ActionBar.html#setListNavigationCallbacks(android.widget.SpinnerAdapter,android。 support.v7.app.ActionBar.OnNavigationListener))。 例如:
  • actionBar.setListNavigationCallbacks(mSpinnerAdapter,mNavigationCallback);这个方法需要你的SpinnerAdapter和ActionBar.OnNavigationListener。

    此过程相对较短,但实现SpinnerAdapter和ActionBar.OnNavigationListener是大部分工作完成的地方。 有许多方法可以实现这些定义下拉导航的功能,并且实现各种类型的SpinnerAdapter超出了本文档的范围(有关更多信息,请参阅SpinnerAdapter类参考)。 但是,下面是SpinnerAdapter和ActionBar.OnNavigationListener的一个示例,帮助您开始(单击标题以显示示例)。


    包括在一个RelativeLayout中的ListView,然后设置View.GONE,直到用户按下想要显示的按钮看起来似乎是一种明智的方式。 使用ListViewAdapter可以填充项目列表。

    每个项目可以是水平方向的线性布局。

    希望我的建议有帮助! :)

    链接地址: http://www.djcxy.com/p/18275.html

    上一篇: Android ActionBar/ActionBarSherlock multiple choices spinner

    下一篇: Can I Vary on a custom header?