Пункт Меню Android Checkable



У меня есть следующий макет меню в моем приложении для Android:



<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/item1"
android:titleCondensed="Options"
android:title="Highlight Options"
android:icon="@android:drawable/ic_menu_preferences" />

<item android:id="@+id/item2"
android:titleCondensed="Persist"
android:title="Persist"
android:icon="@android:drawable/ic_menu_preferences"
android:checkable="true" />
</menu>


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



Я делаю что-то не так?

671   5  

5 ответов:

макет выглядит хорошо. Но вы должны проверить и снять флажок пункт меню в коде.

С документация:

при выборе проверяемого элемента система вызывает соответствующий выбранный элемент-метод обратного вызова (например,onOptionsItemSelected()). Именно здесь вы должны установить состояние флажка, потому что флажок или переключатель не изменяет свое состояние автоматически. Вы можете запросить текущее состояние элемента (как это было до пользователь выбрал его) с isChecked() а затем установите проверенное состояние с setChecked().

оберните itemС group элемент, как это:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="all">
        <item android:id="@+id/item1"
              android:titleCondensed="Options"
              android:title="Highlight Options"
              android:icon="@android:drawable/ic_menu_preferences">
        </item>
        <item android:id="@+id/item2"
              android:titleCondensed="Persist"
              android:title="Persist"
              android:icon="@android:drawable/ic_menu_preferences"
              android:checkable="true">
        </item>
    </group>
</menu>

С Android docs:

атрибут android:checkableBehavior принимает либо:

single-можно проверить только один элемент из группы (переключатели)

All - все элементы могут быть проверены (чекбоксы)

нет-никакие элементы не проверяются

вы можете создать проверяемый пункт меню, установив actionViewClass для проверяемого виджета, как android.widget.CheckBox

res / menu/menu_with_checkable_menu_item.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_favorite"
        android:checkable="true"
        android:title="@string/action_favorite"
        app:actionViewClass="android.widget.CheckBox"
        app:showAsAction="ifRoom|withText" />
</menu>

и вы можете даже можете стиль его, чтобы быть проверяемой звездой, если вы установите actionLayout к макету со стилизованным android.widget.CheckBox

res / layout / action_layout_styled_checkbox.xml

<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
    style="?android:attr/starStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

res / menu/menu_with_checkable_star_menu_item.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_favorites"
        android:checkable="true"
        android:title="@string/action_favorites"
        app:actionLayout="@layout/action_layout_styled_checkbox"
        app:showAsAction="ifRoom|withText" />
</menu>

установить значение

menuItem.setChecked(true/false);

чтобы получить значение

menuItem.isChecked()

Cast MenuItem to CheckBox

CheckBox checkBox= (CheckBox) menuItem.getActionView();

Это может быть тема зависит, но мое меню не показывает флажок. Я нашел этой:

Примечание: пункты меню в меню значков не могут отображать флажок или радио кнопка. Если вы решите сделать элементы в меню значков проверяемыми, то вы должны лично указать состояние, поменяв значок и / или текст каждый раз, когда состояние изменяется между ВКЛ и выкл.

для добавления пунктов меню программно,

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    menu.add("Item1").setActionView(R.layout.action_layout_checkbox).setCheckable(true);
    return super.onCreateOptionsMenu(menu);
}

res / layout / action_layout_checkbox.xml

<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Comments

    Ничего не найдено.