2015-11-01 3 views
0

У меня есть пункт меню. Когда я нажимаю элемент меню, он должен отображать раскрывающееся меню, которое выглядит и оживляет, как меню с плавающим действием. Как мне это сделать?Выпадающее меню из MenuItem

Я попытался использовать ActionView, но понял, что это не путь, поскольку он только меняет панель действий. Может быть, я мог бы использовать Провайдера действий и подстроить подменю, как меню fab. Если я возьму этот подход, все равно я могу повторно использовать существующее меню FAB (например, this)? Или есть лучший способ?

ответ

1

Вы можете использовать «Диалог» в «MenuItem» что-то вроде этого:

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 - поставить "Диалог" код внутри "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); 
    } 

Это только пример, вы можете создайте любой «Диалог», который вы хотите.