Подтвердить что ты не робот

Как добавить кнопку переключения в пункт меню в android

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

4b9b3361

Ответ 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);
  }
}