如何在android中的可检查菜单项中的文本左侧放置复选框图标?

时间:2016-07-21 13:49:01

标签: android checkbox menuitem

我有一个recylerview,每个项目都有一个选项按钮。在按钮上单击一个弹出菜单。在弹出菜单中,必须有一个复选框和一个删除按钮作为项目。第一个菜单项是复选框。我使用了以下代码。

<?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"
>
<item
    android:id="@+id/action_watch"
    android:checkable="true"
    android:title="Watch"
    app:showAsAction="always"
    />

<item
    android:id="@+id/action_delete"
    android:icon="@drawable/ic_action_delete"
    android:title="Remove"
    app:showAsAction="withText|always"/>
</menu>

问题是复选框出现在其文本右侧。我想要它在左边,但我不能。请帮忙。 TIA

2 个答案:

答案 0 :(得分:1)

以上方式无法实现,因为左侧部分已经分配给标题和图标。

如果要显示带有复选框的弹出框,则可以使用带有复选框的Alertdialog。

或者

您可以在弹出视图中使用listview。

答案 1 :(得分:1)

我发现了一种方法。如果有人需要,我会给它作为答案。首先,将未选中的复选框设置为该菜单项的图标。

<?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"
  app:popupTheme="@style/ThemeOverlay.AppCompat.Light" >
    <item
        android:id="@+id/action_checkable"
        android:title="Check"
        app:showAsAction="always"
        android:icon="@drawable/ic_unchecked_checkbox" />
</menu>

然后使用以下方法强制显示菜单图标和标题:

try {
    Class<?> classPopupMenu = Class.forName(popupMenu.getClass().getName());
    Field mPopup = classPopupMenu.getDeclaredField("mPopup");
    mPopup.setAccessible(true);
    Object menuPopupHelper = mPopup.get(popupMenu);
    Class<?> classPopupHelper = Class.forName(menuPopupHelper
                .getClass().getName());
    Method setForceIcons = classPopupHelper.getMethod("setForceShowIcon", boolean.class);
    setForceIcons.invoke(menuPopupHelper, true);
} catch (Exception e) {
    e.printStackTrace();
}

然后在单击该图标时更改菜单的图标和颜色。使用布尔值isSelected跟踪检查状态。使用以下方法更改图标及其颜色:

if(isSelected) {
    MenuItem checkable = (MenuItem) popupMenu.getMenu().findItem(R.id.action_checkable);
    Drawable checkableDrawable = getResources().getDrawable(R.drawable.ic_checked_checkbox);
    checkableDrawable.setColorFilter(getResources().getColor(R.color.primaryColor), PorterDuff.Mode.SRC_ATOP);
    checkable.setIcon(checkableDrawable);
}