我有一个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
答案 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);
}