web-dev-qa-db-fra.com

Comment forcer le menu de débordement sur Android compatbar action?

compat barre d'action Android
C'est possible? Sur les appareils plus anciens (pré 3.0), les éléments qui ne correspondent pas à la barre d'action ne sont affichés que lorsque la touche de menu est enfoncée, je souhaite que ces éléments soient regroupés dans le menu de débordement de la barre d'action.

34
marcosbeirigo

Le menu de dépassement d'action n'est disponible que si aucun bouton de menu fixe n'est disponible sur l'appareil. J'ai trouvé cela indiqué dans les rubriques du cadre sous Interface utilisateur> Barre d'action, consultez la troisième puce ici .

Il existe une bibliothèque de barres d'actions écrite par Jake Wharton appelée ActionBarSherlock. Peut-être que cela est en mesure de vous fournir un style de menu de débordement d'action même sur des appareils plus anciens (qui incluent un bouton de menu dur), mais je n'ai pas examiné cela.

Edit: ActionBarSherlock 4.0 (actuellement une version candidate) a une fonctionnalité intégrée pour forcer le débordement de l'action. Si vous souhaitez étendre vous-même l'exemple ActionBarCompat, vous pouvez jeter un œil sur github pour avoir une idée de la façon dont Jake l'a implémenté. Je suggérerais de chercher à utiliser sa bibliothèque tous ensemble, car c'est très bien fait.

Si vous choisissez d'utiliser la bibliothèque de Jake, examinez la configuration du thème d'activité en tant que @ style/Theme.Sherlock.ForceOverflow pour forcer le menu de débordement sur les appareils plus anciens.

Edit2: L'utilisation du thème ForceOverflow provoque des problèmes ( exemple # 1 ) sur les appareils avec bouton de menu matériel. Ainsi, Jake Wharton va supprimer ForceOverflow dans les futures versions.

46
esilac

D'accord, c'est simple mais difficile à comprendre.

Vous avez d'abord besoin d'un élément de menu que vous souhaitez utiliser comme gonfleur de débordement. 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, ajoutez un sous-menu contenant vos articles que vous voulez dans le menu de débordement. 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>

Au clic, cela gonflera les autres éléments à l'intérieur. Mon application utilise ActionBarSherlock 4.0 donc avant que cela ne fonctionne pour vous, vous devrez accéder au "SplitActionBar". (Fonctionnera toujours par défaut Android Actionbar)

Voici comment: dans votre fichier AndroidManifest.xml, vous devez ajouter ce code sous l'activité dans laquelle vous avez besoin du menu de débordement.

Android:uiOptions="splitActionBarWhenNarrow"

REMARQUE: Votre élément qui gonfle votre menu de débordement DOIT showAsAction="always"

Vwola! vous avez un menu de débordement! J'espère que je vous ai aidé. :)

12
LeviRockerSk8er

Suite à la suggestion de LeviRockerSk8er, j'ai forcé d'avoir un menu de débordement dans la barre d'action comme ceci: 

Voici le code de "menu.xml":

<item
    Android:id="@+id/web_clasica"
    Android:icon="@drawable/ic_action_web_site"
    Android:showAsAction="ifRoom"
    Android:title="@string/menu_web"
    />
<item
    Android:id="@+id/overflow_fijo"
    Android:icon="@drawable/ic_action_core_overflow"
    Android:showAsAction="always"
    Android:title="@string/menu_email"
   >
   <menu>
    <item
    Android:id="@+id/email"
    Android:icon="@drawable/ic_action_new_email"
    Android:showAsAction="ifRoom"
    Android:title="@string/menu_email"
   />
    <item
    Android:id="@+id/share"
    Android:icon="@drawable/ic_action_share"
    Android:showAsAction="ifRoom"
    Android:title="@string/menu_share"
    />
    <item
    Android:id="@+id/about"
    Android:showAsAction="ifRoom"
     Android:icon="@drawable/ic_action_action_about"
    Android:title="@string/menu_about"/>
</menu>
6
harrakiss