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

How to place checkbox icon to left of text in checkable menu item in android?

我有一个 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

无法使用上述方式,因为左侧部分已分配给标题和图标。

如果你想显示带有复选框的弹出窗口,那么你可以使用带有复选框的适配器使用 Alertdialog。

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

我找到了一个方法。如果有人需要,我会给出答案。首先,将未选中的复选框设置为该菜单项的图标。

<?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);
}