2011-06-04 26 views
47

tengo el siguiente menú de diseño en mi aplicación Android:Android artículo comprobable Menú

<?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 de menú no parece ser "comprobable" cuando ejecuto mi aplicación en el Android emulador. Debería haber un tic verde sobre el artículo, ¿verdad? Para indicar que es seleccionable

¿Estoy haciendo algo mal?

+2

Sólo tiene que establecer no androide: comprobable a "true", pero Android : comprobado! –

Respuesta

70

diseño se ve bien. Pero debe marcar y desmarcar el elemento del menú en el código.

Desde el documentation:

Cuando se selecciona un elemento comprobable, el sistema llama a su método de devolución de llamada seleccionado elemento-respectiva (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 era antes de que el usuario lo haya seleccionado) con isChecked() y luego establecer el estado verificado con setChecked().

+0

Justo encima de esta cita, dice 'Puede aplicar un estado comprobado predeterminado a un elemento usando el atributo android: checked en el elemento y cambiarlo en código con el método setChecked(). ¿Cuál es correcto? –

+1

No veo lo que está mal. En esta cita, dijo que se puede aplicar el estado de verificación predeterminado y el estado de verificación se puede cambiar. En mi cita dijo que el estado de verificación necesita cambiar manualmente por código. –

+1

Lo malo de esto ... Estaba confundido por el estado inicial de los elementos del menú, si es necesario configurarlo desde el código o no. Parece que el estado comprobado inicial se puede establecer desde xml, y luego se puede modificar a voluntad desde el código, ¿es correcto? –

26

Wrap las item s en un elemento 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> 

Desde el Android docs:

El atributo android: checkableBehavior acepta ya sea:

sola - Sólo un elemento del grupo se puede comprobar (botones de opción)

todo - Todos los artículos se pueden comprobar (casillas)

ninguno - No hay artículos son comprobable

0

Esto puede depender del tema pero mi menú no mostró una casilla de verificación. He encontrado this:

Nota: Los elementos de menú en el menú de iconos no pueden mostrar una casilla de verificación o un botón de radio . Si elige hacer que los elementos en el menú de iconos sean seleccionables, entonces debe indicar personalmente el estado al cambiar el ícono y/o el cada vez que el estado cambia entre encendido y apagado.

9

se puede crear un elemento de menú comprobable mediante el establecimiento de la actionViewClass a un widget comprobable como android.widget.CheckBox

res/menú/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 puede diseñarlo para ser una estrella comprobable si se establece actionLayout a 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/menú/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() 

moldeada Menultem a C heckBox

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

para añadir 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" /> 
Cuestiones relacionadas