2016-07-21 26 views
0

Ich habe eine Recylerview mit einem Optionsfeld in jedem Element. Beim Klicken auf die Schaltfläche wird ein Popup-Menü angezeigt. Im Popup-Menü muss ein Kontrollkästchen und eine Löschtaste als Element vorhanden sein. Der erste Menüpunkt ist das Kontrollkästchen. Ich habe folgenden Code verwendet.Wie Checkbox-Symbol auf der linken Seite des Textes in überprüfbaren Menüpunkt in 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> 

Problem ist Kontrollkästchen erscheint rechts von seinem Text. Ich will es links, aber ich kann nicht. bitte hilfe. TIA

+0

Ich glaube nicht, dass Sie es ändern sollte - es ist ein Standardmenü – Divers

+0

@WadeWilson Bitte lesen Sie die Frage - 'Problem ist Checkbox rechts neben dem Text angezeigt wird. Ich will es links, aber ich kann nicht. bitte help' – Divers

Antwort

1

Ich fand einen Weg. Falls jemand etwas braucht, gebe ich es als Antwort. Setzen Sie zunächst ein nicht markiertes Kontrollkästchen als das Symbol für diesen Menüeintrag.

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

zeigen dann gewaltsam auf das Menüsymbol und Titel dieses mit:

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

dann auf das Symbol und die Farbe des Menüs während Klick auf das Symbol. Verfolgen Sie den Prüfstatus mit einem booleschen isSelected. Ändern Sie das Symbol und es ist Farbe dies mit:

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

Mit dem obigen Weg nicht möglich, weil der linke Abschnitt bereits Titel und Symbol zugeordnet ist.

Wenn Sie Popup mit Kontrollkästchen anzeigen möchten, können Sie Alertdialog mit Kontrollkästchen mit Adapter verwenden.

Oder

Sie Listenansicht innerhalb Popup-Ansicht verwenden können.

+0

Ist es möglich, Kontrollkästchen links neben Titel und Symbol zu platzieren? – ARiF

+0

Sorry, aber mit Menü nicht möglich – ViramP

+0

Danke, zumindest lerne ich, dass es nicht möglich ist, wie ich es wollte. – ARiF