android - 如何防止 ActionBar 菜单在选择时折叠?

标签 android checkbox menu

这是我的menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">

<item
   android:id="@+id/filter"
    android:icon="@drawable/filter"
    app:showAsAction="always"
    android:title="Filter">

    <menu>
        <item
            android:id="@+id/action_dropdown1"
            android:title="free"
            android:checkable="true"
            app:showAsAction="always"
            android:icon="@drawable/ic_free"/>
        <item
            android:id="@+id/action_dropdown2"
            android:title="paid"
            android:icon="@drawable/ic_paid">

            <menu>
                <group android:checkableBehavior="all">

                <item
                    android:id="@+id/paid_cat1"
                    android:title="0-50"
                    android:checkable="true"
                    android:icon="@drawable/ic_paid"/>
                <item
                    android:checkable="true"
                    android:id="@+id/paid_cat2"
                    android:title="51-100"
                    android:icon="@drawable/ic_paid"/>

                <item
                    android:checkable="true"
                    android:id="@+id/paid_cat3"
                    android:title="101-500"
                    android:icon="@drawable/ic_paid"/>

                <item
                    android:checkable="true"
                    android:id="@+id/paid_cat4"
                    android:title="500-10,000"
                    android:icon="@drawable/ic_paid"/>

                <item
                    android:checkable="true"
                    android:id="@+id/paid_cat5"
                    android:title="show all"
                    android:icon="@drawable/ic_paid"/>

                </group>

            </menu>
            </item>

        <item

            android:id="@+id/action_find"
            android:title="find"
            android:icon="@drawable/ic_search_black_24dp"/>

    </menu>
    </item>

<item
    android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    app:showAsAction="always"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:title="Search"/>

我想要实现的是,当用户单击菜单中的复选框时,他们应该能够选择多个菜单项...但是我一旦单击项目,它就会消失

或者有没有更好的替代方法来实现我也想到使用微调器的相同效果,但它的行为相同

最佳答案

您可以使用弹出菜单,并将自定义布局锚定到菜单项。
单击“付费”菜单项时显示弹出菜单 -

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.action_dropdown2:
            showPopUp();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

public void showPopUp() {
    View mPopUpView = LayoutInflater.from(this).inflate(R.layout.checkable_items, null);
     PopupWindow mPopupWindow = new PopupWindow(
            mPopUpView,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    mPopupWindow.setOutsideTouchable(true);
    mPopupWindow.setFocusable(true);
    mPopupWindow.setBackgroundDrawable(new ColorDrawable());
    // Set content width and height
    mPopupWindow.setHeight(convertDpToPx(140));
    mPopupWindow.setWidth(convertDpToPx(120));
    mPopupWindow.showAsDropDown(this.findViewById(R.id.filter), convertDpToPx(-20), convertDpToPx(-40));
}

int convertDpToPx(int dp){
    return   (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

这是自定义布局 checkable_items.xml -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical">

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="0-50" />

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="51-100" />

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="101-500" />

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="500-10,000" />

</LinearLayout>

将菜单文件更新为 -

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">

<item
    android:id="@+id/filter"
    android:icon="@android:drawable/ic_dialog_email"
    android:title="Filter"
    app:showAsAction="always">

    <menu>
        <item
            android:id="@+id/action_dropdown1"
            android:checkable="true"
            android:icon="@android:drawable/btn_dialog"
            android:title="free"
            app:showAsAction="always" />
        <item
            android:id="@+id/action_dropdown2"
            android:icon="@android:drawable/btn_minus"
            android:title="paid">

        </item>

        <item

            android:id="@+id/action_find"
            android:icon="@android:drawable/ic_dialog_email"
            android:title="find" />

    </menu>
</item>

<item
    android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    android:title="Search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="always" />
</menu>

您可以随时使用 mPopupWindow.dismiss() 关闭弹出窗口。希望这有帮助!

enter image description here

关于android - 如何防止 ActionBar 菜单在选择时折叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41741296/

相关文章:

java - 从 Libgdx 渲染方法启动 Android Intent

javascript - 无法从动态填充的字符串中 trim 尾随逗号

android - 缺少复选框

html - 带有 ul : prevent drop down from overflowing menu container 的 WordPress 菜单

java - 从 3rd 方库中删除未使用的 Assets

java - 如何在java/android中获得完美的UTC时间?

android - 如何在 android 4.0 ICS 中启用底部菜单按钮

jquery - 单击 jQuery SmartMenus 中的顶级链接时如何打开子菜单

android - Unity ARFoundation Gradle构建失败-拒绝last-build.bin访问

c# - 如何删除选中复选框的数据 GridView 中的行?