web-dev-qa-db-fra.com

Comment ajouter un bouton bascule dans l'élément de menu dans android

J'ai un élément de menu d'options dans mon application. L'exigence était d'ajouter un bouton à bascule à un élément de menu. Est-ce possible?

25
Anju

Au moment d'écrire ces lignes, il y a 3 options .

1) Utilisez app:actionViewClass. Exemple:

<?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) Vous pouvez utiliser une disposition personnalisée dans un élément de menu pour ajouter un bouton à bascule. Exemple:

Créez une mise en page avec Switch (vous pouvez également utiliser 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" />

Et utilisez cette disposition dans l'élément de menu:

<?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) Vous devez définir Android:checkable propriété du menu pour true et contrôle son état vérifié lors de l'exécution. Exemple:

Menu :

<item
    Android:id="@+id/checkable_menu"
    Android:checkable="true"
    Android:title="@string/checkable" />

Activité :

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;
    }
}

J'espère que cela t'aides.

50
ozbek

utiliser l'application: actionViewClass

 <item Android:id="@+id/id"
    Android:title="@string/string"
    app:actionViewClass="Android.widget.ToggleButton"
    Android:orderInCategory="80"
    app:showAsAction="always" />
1
GreatC
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); 
 }
0
Digvesh Patel

Voulez-vous dire que vous souhaitez ajouter un bouton à bascule comme l'un des éléments/éléments apparaissant dans le menu d'options ou ajouter un bouton à un élément de liste à partir du menu?

Ensuite, vous pouvez le faire avec une mise en page personnalisée (utilisez un ListView à l'intérieur si vous le souhaitez) et le gonfler dans le

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    return true;
}

et vous pouvez enregistrer les valeurs chaque fois que le bouton bascule.

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);
  }
}
0
Pararth