如何将复选框图标放置在 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);
}
我有一个 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);
}