web-dev-qa-db-ja.com

androidのメニュー項目にトグルボタンを追加する方法

アプリケーションにオプションメニュー項目があります。要件は、メニュー項目にトグルボタンを追加することでした。これは可能ですか?

25
Anju

この記事の執筆時点では、3つのオプションがあります。

1)app:actionViewClassを使用します。例:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto">
    <item
        Android:title="Switch!"
        app:actionViewClass="Android.widget.Switch"
        app:showAsAction="always" />
</menu>

2)メニュー項目でカスタムレイアウトを使用して、トグルボタンを追加できます。例:

Switch (または、 ToggleButton )、res/layout/menu_switch.xmlを使用してレイアウトを作成します。

<?xml version="1.0" encoding="utf-8"?>
<Switch xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="match_parent"
    Android:padding="64dp" />

そして、メニュー項目でそのレイアウトを使用します:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto">
    <item
        Android:title="@string/switch_button_title"
        app:actionLayout="@layout/menu_switch"
        app:showAsAction="always" />
</menu>

3)メニューのAndroid:checkableプロパティをtrueに設定し、実行時にチェック状態を制御する必要があります。例:

メニュー

<item
    Android:id="@+id/checkable_menu"
    Android:checkable="true"
    Android:title="@string/checkable" />

アクティビティ

private boolean isChecked = false;

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem checkable = menu.findItem(R.id.checkable_menu);
    checkable.setChecked(isChecked);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.checkable_menu:
            isChecked = !item.isChecked();
            item.setChecked(isChecked);
            return true;
        default:
            return false;
    }
}

お役に立てれば。

48
ozbek

app:actionViewClassを使用します

 <item Android:id="@+id/id"
    Android:title="@string/string"
    app:actionViewClass="Android.widget.ToggleButton"
    Android:orderInCategory="80"
    app:showAsAction="always" />
1
GreatC
public boolean onPrepareOptionsMenu(final Menu menu) {       
      if(super.mMapView.isTraffic()) 
           menu.findItem(MENU_TRAFFIC_ID).setIcon(R.drawable.traffic_off_48); 
      else 
           menu.findItem(MENU_TRAFFIC_ID).setIcon(R.drawable.traffic_on_48); 

      return super.onPrepareOptionsMenu(menu); 
 }
0
Digvesh Patel

オプションメニューに表示される要素/アイテムの1つとしてトグルボタンを追加するのですか、それともメニューからリストアイテムにボタンを追加するのですか?

次に、カスタムレイアウト(必要に応じてListViewを使用)でそれを実行し、

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    return true;
}

ボタンを切り替えるたびに値を保存できます。

public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
    case R.id.btnToggleValue:
      // save it here
      return true;
    case R.id.btnSecond:
      ...
      return true;
    default:
      return super.onOptionsItemSelected(item);
  }
}
0
Pararth