studio - Elemento de menú comprobable de Android
menu overflow android studio (5)
Ajustar el item
s en un elemento de group
, como este:
<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>
De los documentos de Android :
El atributo android: checkableBehavior acepta:
único: solo se puede marcar un elemento del grupo (botones de opción)
todos - Todos los artículos se pueden marcar (casillas de verificación)
ninguno - No hay elementos son seleccionables
Tengo el siguiente diseño de menú en mi aplicación de 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>
Mi problema es que el segundo elemento del menú no parece "verificable" cuando ejecuto mi aplicación en el emulador de Android. Debería haber un tic verde sobre el artículo, ¿verdad? Para indicar que es seleccionable
¿Estoy haciendo algo mal?
El diseño se ve bien. Pero debe marcar y desmarcar el elemento del menú en el código.
De la documentation :
Cuando se selecciona un elemento seleccionable, el sistema llama al método de devolución de llamada seleccionado por elemento (como
onOptionsItemSelected()
). Aquí debe establecer el estado de la casilla de verificación, ya que una casilla de verificación o un botón de opción no cambia su estado automáticamente. Puede consultar el estado actual del artículo (como lo era antes de que el usuario lo haya seleccionado) conisChecked()
y luego establecer el estado verificado consetChecked()
.
Esto puede depender del tema pero mi menú no mostró una casilla de verificación. Encontré this :
Nota: Los elementos de menú en el menú de iconos no pueden mostrar una casilla de verificación o un botón de opción. Si eliges hacer que los elementos en el menú del icono sean seleccionables, entonces debes indicar el estado personalmente al cambiar el ícono y / o el texto cada vez que el estado cambie entre encendido y apagado.
Para agregar elementos de menú mediante programación,
@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" />
Puede crear un elemento de menú seleccionable configurando actionViewClass
en un widget comprobable como 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>
Y puede incluso actionLayout
para que sea una estrella comprobable si establece actionLayout
en un diseño con un estilo 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>
Para establecer el valor
menuItem.setChecked(true/false);
Para obtener el valor
menuItem.isChecked()
Echar MenuItem a CheckBox
CheckBox checkBox= (CheckBox) menuItem.getActionView();