アプリケーションにオプションメニュー項目があります。要件は、メニュー項目にトグルボタンを追加することでした。これは可能ですか?
この記事の執筆時点では、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;
}
}
お役に立てれば。
app:actionViewClassを使用します
<item Android:id="@+id/id"
Android:title="@string/string"
app:actionViewClass="Android.widget.ToggleButton"
Android:orderInCategory="80"
app:showAsAction="always" />
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);
}
オプションメニューに表示される要素/アイテムの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);
}
}