2016-07-21 35 views
0

我有一个recylerview每个项目中的选项按钮。在按钮上单击一个弹出菜单显示。在弹出菜单中必须有一个复选框和一个删除按钮作为项目。第一个菜单项是复选框。我使用了下面的代码。如何将复选框图标放置在Android的可检查菜单项中的文本左侧?

<?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

我不认为你应该改变它 - 这是一个标准的菜单 – Divers

+0

@WadeWilson请阅读问题 - '问题是复选框正好出现文字。我想在左边,但我不能。请帮忙' – Divers

回答

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

以上方式不可能,因为左侧已经分配了标题和图标。

如果你想显示与复选框弹出,那么你可以使用Alertdialog复选框使用适配器。

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

+0

是否可以将复选框放在标题和图标的左侧? – ARiF

+0

对不起,但菜单不可能 – ViramP

+0

谢谢,至少我知道这是不可能的,我想怎么做。 – ARiF

相关问题