2016-03-30 5 views
6

Wie kann ich die Menüeinträge in einem Popup-Menü anpassen? Ich brauche einen Schalter für das erste Menüelement. Hier ist, was ich habe, so weit:Android Benutzerdefinierte Popup-Menü mit Schalter

menu.xml

<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" 
    tools:context="android.oli.com.fitnessapp.activities.LiveSelectActivity"> 

    <item 
     android:icon="@drawable/ic_access_alarm_white_24dp" 
     android:orderInCategory="100" 
     app:showAsAction="always" 
     android:visible="true" 
     android:title="@string/action_settings" 
     android:onClick="showPopup"/> 

</menu> 

menu_popup.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:id="@+id/one" 
     android:title="One"/> 

    <item 
     android:id="@+id/setTime" 
     android:title="Two" 
     android:onClick="showTimePickerDialog"/> 


</menu> 

Aktivität Snippet

public void showPopup(MenuItem menuItem){ 
     View view = findViewById(R.id.action_alarm); 
     PopupMenu popup = new PopupMenu(this, view); 
     MenuInflater inflater = popup.getMenuInflater(); 
     inflater.inflate(R.menu.menu_popup, popup.getMenu()); 
     popup.show(); 
    } 

Antwort

13

Sie können ein Popup-Fenster verwenden, da benutzerdefinierte Layouts verwendet werden können.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" 
    android:padding="5dp"> 

<Switch 
    android:id="@+id/mySwitch" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="20dp" 
    android:text="Play with the Switch" /> 

<TextView 
    android:id="@+id/switchStatus" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/mySwitch" 
    android:layout_marginTop="22dp" 
    android:text="Medium Text" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

</RelativeLayout> 

und in ur Aktivität implementieren diese Methode:

/* you should refer to a view to stick your popup wherever u want. 
** e.g. Button button = (Button) findviewbyId(R.id.btn); 
**  if(popupWindow != null) 
**   showPopup(button); 
**/ 
    public void showPopup(View v) { 


      LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      final View popupView = layoutInflater.inflate(R.layout.popup_filter_layout, null); 

      popupWindow = new PopupWindow(
        popupView, 
        ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT); 

      popupWindow.setBackgroundDrawable(new BitmapDrawable()); 
      popupWindow.setOutsideTouchable(true); 
      popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { 
       @Override 
       public void onDismiss() { 
        //TODO do sth here on dismiss 
       } 
      }); 

      popupWindow.showAsDropDown(v); 
} 
+0

BitmapDrawable() ist veraltet. Das Fenster wird nicht angezeigt. Wie kann ich es so positionieren, dass es wie ein Popupmenü aussieht? –

+2

Ich habe meine Antwort bearbeitet. Sie sollten popupWindow.showAsDropDown (v) aufrufen, um es sichtbar zu machen. Und das ist True BitmapDrawable() veraltet, aber es ist ein Trick, um es auf Tastendruck disappear zu machen. Weitere Details finden Sie auf http://StackOverflow.com/A/3122696/5923606 – uguboz

+1

Und um es wie ein Popupmenü zu positionieren, geben Sie Ihre Ansicht "View = findViewById (R.id.action_alarm)" in popupWindow.showAsDropDown (view) – uguboz