2016-03-30 83 views
6

如何在彈出菜單中自定義菜單項?我需要第一個菜單項的開關。以下是我走到這一步:帶開關的Android自定義彈出菜單

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> 

活動片斷

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

回答

13

您可以使用popupwindow,因爲它允許使用自定義佈局。

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

和在烏爾活性實現此方法:

/* 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()已過時。該窗口不顯示。我如何定位它看起來像一個popupmenu? –

+2

我編輯了我的答案。您應該調用popupWindow.showAsDropDown(v)使其可見。而這是真正的BitmapDrawable()棄用,但它是一個竅門,使其消除按鍵按下。更多詳細信息請參閱http://stackoverflow.com/a/3122696/5923606 – uguboz

+1

並將其定位爲popupmenu將您的視圖「View view = findViewById(R.id.action_alarm)」輸入到popupWindow.showAsDropDown(view) – uguboz