我想在android中自定义popupmenu,默认弹出菜单提供更多空间,因此我试图更改弹出菜单中的自定义布局,但我不知道如何。

android - 如何将自定义布局传递给PopupMenu?-LMLPHP

注意:我想做这个小的弹出窗口设计,所以我使用默认的弹出菜单,但是我想自定义它。

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

最佳答案

要从按钮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
        }
    });

编辑

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

10-08 13:28