2016-03-30 11 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> 

とUR活性でこのメソッドを実装し:

/* 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()は推奨されません。ウィンドウが表示されません。どのようにポップアップメニューのように見えるのですか? –

+2

私は私の答えを編集しました。 popupWindow.showAsDropDown(v)を呼び出して可視にする必要があります。 BitmapDrawable()は推奨されていませんが、押されたキーをディサッパーにするのは難しいことです。詳細はhttp://stackoverflow.com/a/3122696/5923606 – uguboz

+1

を参照し、ポップアップメニューのように配置すると、ビュー "view view = findViewById(R.id.action_alarm)"がpopupWindow.showAsDropDown(view)に入力されます – uguboz

関連する問題