2016-07-21 72 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

相關問題