У меня есть пункт меню в приложении. Требование состояло в том, чтобы добавить кнопку переключения в пункт меню. Возможно ли это?
Как добавить кнопку переключения в пункт меню в android
Ответ 1
На момент написания статьи есть 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;
}
}
Надеюсь это поможет.
Ответ 2
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);
}
Ответ 3
использовать приложение: actionViewClass
<item android:id="@+id/id"
android:title="@string/string"
app:actionViewClass="android.widget.ToggleButton"
android:orderInCategory="80"
app:showAsAction="always" />
Ответ 4
Вы хотите добавить кнопку переключения в качестве одного из элементов/элементов, отображаемых в меню параметров, или добавить кнопку в элемент списка из меню?
Затем вы можете сделать это с помощью настраиваемого макета (используйте 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);
}
}