web-dev-qa-db-ja.com

カスタムレイアウトをPopupMenuに渡す方法

Androidでpopupmenuをカスタマイズしたいので、デフォルトのポップアップメニューにより多くのスペースが与えられるため、ポップアップメニューでカスタムレイアウトを変更しようとしていますが、方法がわかりません。 画像

注:この小さなポップアップデザインを行いたいので、デフォルトのポップアップメニューを使用しますが、カスタマイズします。

findViewById(R.id.menuclick).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                PopupMenu popupMenu = new PopupMenu(Sample1.this, view);
                popupMenu.setOnMenuItemClickListener(Sample1.this);
                popupMenu.inflate(R.layout.menus_layout);
                popupMenu.show();




            }
        });
6
Kalaivani R

ボタンpopupMenuからonClickを膨張させるには、次のコードを使用します。

btn = (Button) findViewById(R.id.btn);   
btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupMenu popup = new PopupMenu(MainActivity.this, v);
            popup.getMenuInflater().inflate(R.menu.pop_up, popup.getMenu());

            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    Toast.makeText(MainActivity.this, "Some Text" + item.getTitle(), Toast.LENGTH_SHORT).show();
                    return true;
                }
            });
            popup.show();//showing popup menu
        }
    });

[〜#〜] edit [〜#〜]

PopupMenuのスタイルを設定するには、次のスタイルを追加します。

<style name="PopupMenu" parent="@Android:style/Widget.PopupMenu">
        <item name="Android:popupBackground">#ffffff</item>
    </style>

また、テキストの横にアイコンを追加する必要があることに気付きました。 popupMenuにアイコンを追加することができます。ただし、代わりにポップアップウィンドウを使用することをお勧めします。サンプルコードを次に示します。

PopupWindow mypopupWindow;
setPopUpWindow();  
     btn=(Button)findViewById(R.id.btn);  
     btn.setOnClickListener(new View.OnClickListener() {  
       @Override  
       public void onClick(View v) {              
           mypopupWindow.showAsDropDown(v,-153,0);  
           //showAsDropDown(below which view you want to show as dropdown,horizontal position, vertical position)  
         }  
       }  
     });  
   }  
   private void setPopUpWindow() {  
     LayoutInflater inflater = (LayoutInflater)  
         getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
     view = inflater.inflate(R.layout.popup, null);  

     Start=(RelativeLayout)view.findViewById(R.id.start_btn);  
     Pause=(RelativeLayout)view.findViewById(R.id.pause_btn);  
     Stop=(RelativeLayout)view.findViewById(R.id.stop_btn);

  mypopupWindow = new PopupWindow(view,300, RelativeLayout.LayoutParams.WRAP_CONTENT, true);

ポップアップレイアウト

<?xml version="1.0" encoding="utf-8"?>  
 <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"  
   Android:orientation="vertical" Android:layout_width="wrap_content"  
   Android:background="@drawable/whitedrawable"  
   Android:paddingRight="0dp"  
   Android:layout_marginRight="0dp"  
   Android:layout_height="wrap_content">  
   <RelativeLayout  
     Android:id="@+id/btn1"  
     Android:layout_width="wrap_content"  
     Android:layout_height="wrap_content">  
     <ImageView  
       Android:layout_centerHorizontal="true"  
       Android:layout_centerVertical="true"  
       Android:layout_alignParentLeft="true"  
       Android:layout_width="wrap_content"  
       Android:layout_height="wrap_content"  
       Android:src="@drawable/startimg"  
       Android:id="@+id/startimg"  
       Android:paddingLeft="10dp"  
       Android:paddingRight="10dp"  
       Android:paddingTop="5dp"  
       Android:paddingBottom="5dp"  
       />  
     <TextView  
       Android:layout_centerHorizontal="true"  
       Android:layout_centerVertical="true"  
       Android:layout_width="wrap_content"  
       Android:layout_height="wrap_content"  
       Android:paddingRight="0dp"  
       Android:text="Start"  
       Android:layout_toRightOf="@+id/startimg"  
       />  
 <!-- Continue for other items-->

whitedrawableを使用して、選択した背景を設定できます。 9patchを使用して、背景の影と丸い角を取得できます。

PopupWindowを閉じるには、次のコードを使用します。

mypopupWindow.getContentView().setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mypopupWindow.dismiss();
    }
});

戻るボタンを使用して閉じるには、次を使用します。

@Override
public void onBackPressed() {
    if(mypopupWindow.isShowing()) {
        mypopupWindow.dismiss();
        return;
    }
    super.onBackPressed();
}
7
Abhi