90 votes

Barre d'action Android ne montrant pas de débordement

J'ai une barre d'action dans mon application avec 3 éléments.

Seuls 2 peuvent être affichés en raison de problèmes d'espace. Je m'attends donc à ce que le premier soit affiché et le reste affiché dans le débordement. Cependant, dans la pratique, seuls les 2 premiers éléments sont affichés et aucun débordement n'est détectable.

Voici le code approprié: list_menu.xml

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_insert"
    android:icon="@android:drawable/ic_menu_add"
    android:title="@string/menu_insert" 
    android:showAsAction="ifRoom|withText"/>
<item android:id="@+id/menu_call"
    android:icon="@android:drawable/ic_menu_call"
    android:title="@string/menu_call" 
    android:showAsAction="ifRoom|withText"/>
<item android:id="@+id/menu_agenda"
    android:icon="@android:drawable/ic_menu_agenda"
    android:title="@string/menu_agenda" 
    android:showAsAction="ifRoom|withText"/>
</menu>
 

Activité.java

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

Merci!

125voto

Kaushik Points 1878

Si vous souhaitez afficher les trois points, quel que soit le bouton de menu de l'appareil! alors vous pouvez appeler cette méthode dans la méthode onCreate de votre classe d'application

 private void getOverflowMenu() {

     try {
        ViewConfiguration config = ViewConfiguration.get(this);
        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
        if(menuKeyField != null) {
            menuKeyField.setAccessible(true);
            menuKeyField.setBoolean(config, false);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
 

54voto

Kirit Vaghela Points 3653

Barre d'action

res / menu / menu.xml

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- Search / will display always -->
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        android:showAsAction="always"
        android:title="@string/action_search"/>

    <!-- Location Found -->
    <item
        android:id="@+id/action_location_found"
        android:icon="@drawable/ic_action_location_found"
        android:showAsAction="always"
        android:title="@string/action_location_found"/>

    <!-- More -->
    <item
        android:id="@+id/a_More"
        android:icon="@drawable/ic_action_overflow"
        android:showAsAction="always"
        android:title="More">
        <menu>

            <!-- Refresh -->
            <item
                android:id="@+id/action_refresh"
                android:icon="@drawable/ic_action_refresh"
                android:showAsAction="never"
                android:title="@string/action_refresh"/>

            <!-- Help -->
            <item
                android:id="@+id/action_help"
                android:icon="@drawable/ic_action_help"
                android:showAsAction="never"
                android:title="@string/action_help"/>

            <!-- Check updates -->
            <item
                android:id="@+id/action_check_updates"
                android:icon="@drawable/ic_action_refresh"
                android:showAsAction="never"
                android:title="@string/action_check_updates"/>
        </menu>
    </item>

</menu>
 

MainActivity.java

 public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);

        return super.onCreateOptionsMenu(menu);
    }

}
 

Téléchargez le jeu d'icônes de la barre d'action

42voto

LeviRockerSk8er Points 556

Je me rends compte que ce n'est pas un menu de dépassement, mais il est similaire. Bon d'accord, c'est simple, mais il était difficile à comprendre.

Il faut d'abord un élément de menu que vous souhaitez utiliser comme le dépassement de inflater. Exemple

<item
        android:id="@+id/a_More"
        android:icon="@drawable/more"
        android:showAsAction="always"
        android:title="More">
        </item>

Une fois que vous avez votre article, ajouter un sous-menu contenant vos éléments que vous voulez dans le menu contextuel. Exemple:

<item
    android:id="@+id/a_More"
    android:icon="@drawable/more"
    android:showAsAction="always"
    android:title="More">
    <menu>
        <item
            android:id="@+id/aM_Home"
            android:icon="@drawable/home"
            android:title="Home"/>
    </menu>
</item>

Cliquez sur ce fait gonfler d'autres éléments à l'intérieur. Mon application utilise ActionBarSherlock 4.0 donc avant que cela ne fonctionne pour vous, vous aurez besoin pour accéder à la "SplitActionBar". (Fonctionnera toujours sur android par défaut Actionbar)

Voici comment: Dans votre AndroidManifest.xml fichier, vous devez ajouter ce code en vertu de l'activité, vous devez le menu contextuel.

android:uiOptions="splitActionBarWhenNarrow"

REMARQUE: Votre article qui gonfle votre menu de dépassement DOIT showAsAction="always"

Vwola! vous avez un menu de dépassement! Espère que je vous ai aidé. :)

26voto

lbatteau Points 945

Sur les appareils doté de boutons menu (Galaxy S3, têtu comme Samsung, c’est...), le menu débordement se comporte comme le menu « traditionnel », en utilisant le bouton de menu matériel.

5voto

wnafee Points 1676

Quand vous dites menu « débordement », voulez-vous dire les trois points qui apparaissent à la fin pour indiquer qu’il n’y a plus d’articles... ou que tu veux dire l’actionbar split qui apparaît dans la partie inférieure des éléments de dépassement de capacité ?

Si vous voulez dire que la barre d’action partagée, vous devez ajouter ce fichier manifeste de votre activité

Par défaut, le menu de débordement de trois points devrait se produire automatiquement, il est donc difficile de dire quel est le problème de l’information vous fournis ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X