从MenuItem下拉菜单

时间:2015-11-01 11:48:32

标签: android android-layout android-actionbar android-menu

我有一个菜单项。当我按下菜单项时,它应显示一个下拉菜单,其外观和动画类似于浮动操作菜单。我该怎么做呢?

我尝试使用ActionView,但意识到这不是要走的路,因为它只会改变操作栏。也许我可以使用Action Provider并将子菜单设置为fab菜单。如果我采用这种方法,无论如何我可以重用现有的FAB菜单(如this)实现吗?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以在“MenuItem”中使用“Dialog”,如下所示:

1-首先创建一个布局。

XML文件:

<?xml version="1.0" encoding="utf-8"?>

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

<RadioGroup
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:id="@+id/radioGroup"
    android:weightSum="1"
    android:gravity="right">
<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="S"
    android:id="@+id/rbtn_small_z"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:checked="false"
    android:textStyle="bold"
    android:textSize="18dp"
    android:drawableRight="@android:drawable/btn_radio"
    android:button="@null"
    android:gravity="center_vertical|right" />

    <RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="M"
    android:id="@+id/rbtn_mid_z"
    android:layout_below="@+id/rbtn_small_z"
    android:layout_centerHorizontal="true"
    android:checked="false"
    android:textStyle="bold"
    android:textSize="18dp"
    android:drawableRight="@android:drawable/btn_radio"
    android:button="@null"
    android:gravity="center_vertical" />

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="L"
    android:id="@+id/rbtn_large_z"
    android:layout_below="@+id/rbtn_mid_z"
    android:layout_centerHorizontal="true"
    android:checked="false"
    android:layout_weight="0.86"
    android:textStyle="bold"
    android:textSize="18dp"
    android:drawableRight="@android:drawable/btn_radio"
    android:button="@null"
    android:gravity="center_vertical|right" />

</RadioGroup>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="GO"
    android:id="@+id/btn_go"
    android:layout_below="@+id/radioGroup"
    android:layout_alignRight="@+id/radioGroup"
    android:layout_alignEnd="@+id/radioGroup"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

   </RelativeLayout>

2 - 将“Dialog”代码放在“MenuItem”中,如下所示:

你的班级:

public boolean onOptionsItemSelected(final MenuItem item) {

    int id = item.getItemId();

        case R.id.size_change:

            Dialog dialog = new Dialog(MainWriting.this);
            dialog.setContentView(R.layout.custome_alret);
            dialog.setTitle("......");
            dialog.setCancelable(true);

            btnGo = (Button)dialog.findViewById(R.id.btn_go);
            rg = (RadioGroup)dialog.findViewById(R.id.radioGroup);
            rbtn_small_z = (RadioButton) 
            dialog.findViewById(R.id.rbtn_small_z);
            rbtn_mid_z = (RadioButton) dialog.findViewById(R.id.rbtn_mid_z);
            rbtn_large_z = (RadioButton)
            dialog.findViewById(R.id.rbtn_large_z);


            rg.setOnCheckedChangeListener(new 
            RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup radioGroup, 
                final int i) {

                    btnGo.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {

                    if (i == rbtn_small_z.getId()) {

                    }

                      // do something

                    }

                    if (i == rbtn_mid_z.getId()) {

                       // do something
                    }

                    if (i == rbtn_large_z.getId()) {

                        // do something
                        }
                    }

                            dialog.dismiss();
                }});
     }});


    }
    return super.onOptionsItemSelected(item);
  }

这只是一个例子,你可以创建你想要的任何“对话框”。