web-dev-qa-db-fra.com

Comment désactiver / masquer l'indicateur à trois points (indicateur de menu d'options) sur les combinés ICS

Comment désactiver/masquer l'indicateur à trois points (indicateur de menu d'options) sur les combinés ICS qui n'ont pas de bouton de menu.?

J'exécute l'application en tant que <uses-sdk Android:minSdkVersion="5"/> dans Manifest, le code est compilé avec 4.0. L'indicateur à trois points apparaît sur chaque écran.

Exemple pour les activités de préférence, je ne veux pas afficher l'indicateur à trois points, car il n'a pas d'options de menu.

Ajouter Android:targetSdkVersion="14" en manifeste cela fonctionne. Cependant, vous ne voulez pas masquer/supprimer le bouton à trois points sur tous les écrans. Ce n'est que par préférence que les activités ne veulent pas afficher ce bouton à trois points.

47
Subba

Remplacez onPrepareOptionsMenu() dans le fragment de la préférence par ceci:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem item= menu.findItem(R.id.menu_settings);
    item.setVisible(false);
    super.onPrepareOptionsMenu(menu);
    return true;
}

si vous avez plus d'un élément, définissez tous les indicateurs de visibilité des éléments sur faux

et ajoutez la commande setHasOptionsMenu(true); à la commande onCreate

après avoir défini toute la visibilité des éléments sur faux, le menu disparaîtra

sur l'activité, la seule différence est que onPrepareOptionsMenu est boolean et vous n'avez pas besoin d'ajouter la commande setHasOptionsMenu(true); lors de la création

31
Asaf Manassen

Je viens de supprimer la méthode:

@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    getSupportMenuInflater().inflate(R.menu.main, menu);
    return true;
}

alors ce menu à trois points disparaît (:


J'espère que ça aide.

25
alicanbatur
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
       return false;
 }
17
dnocode

Il n'y a aucun moyen d'afficher/masquer l'indicateur de menu "trois points" pour une seule activité. Vous pouvez masquer cet indicateur de menu uniquement pour l'application entière en spécifiant Android: targetSdkVersion = "14" (ou supérieur) dans votre fichier manifeste.

Cependant, cet indicateur de menu ne montre pas l'activité des préférences si elle s'étend de la classe native Android.preference.PreferenceActivity . J'ai ce scénario implémenté dans quelques-unes de mes applications, et cela fonctionne parfaitement.

Je suppose que vous utilisez des implémentations de préférences personnalisées qui ne s'étendent pas de PreferenceActivity. Android Dev Team suggère de toujours utiliser PreferenceActivity pour toutes les préférences dans vos applications.

9
HitOdessit

Beaucoup trop tard pour la fête ici, j'essayais de supprimer tous mes éléments de menu et les 3 points (indicateur de menu d'option), j'ai fait différemment de la solution donnée ici, je suis surpris que personne ne l'ait dit. Il y a une balise de visibilité qui peut être définie sur false et aucun changement de code dans l'activité n'est requisvisibility=false fait l'affaire

dans res/menu/..

<item
    Android:id="@+id/action_settings"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    visibility=false
    Android:title="@string/action_settings"/>
6
war_Hero

remplacer la méthode et retourner faux rappelez-vous de ne pas appeler super

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    return false;
}
5
dnocode

Supprimer cet élément dans res / menu / main.xml

<item
    Android:id="@+id/action_settings"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_settings"/>

De plus: faites ne pas ajouter un élément qui a showAsAction="never"- cela évitera que les points n'apparaissent. Si vous avez plus d'éléments que ce qui ne peut pas être affiché en même temps, les points seront là (et ce sont des éléments marqués ifRoom).

4
Weverton Souza

Le code suivant a fonctionné pour mon application. Testé sur Samsung Galaxy S4 (Android 4.3) et Nexus 4 (Android 4.2):

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem item= menu.findItem(R.id.action_settings);
    item.setVisible(false);
    return true;
}
4
David T. Nguyen
for hiding 3 dots in actionbar/ toolbar

 public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_dash_board_drawer, menu);
        return false;  //for visible 3 dots change to true, hiding false
    }
3
Kishore Reddy

Je viens d'exclure la méthode "onCreateOptionsMenu":

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    //Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_planos, menu);
    return true;
}
2
GCoe

Vous pouvez réellement changer la Android targetVersion forçant ainsi le menu à 3 points à masquer ou à afficher. Vous devez remplacer onCreate de votre activité comme ceci:

@Override
public void onCreate(Bundle savedInstanceState) {
    getApplicationInfo().targetSdkVersion = 10; // To enable the 3-dot menu call this code before super.OnCreate
    super.onCreate(savedInstanceState); 
}

@Override
public void onCreate(Bundle savedInstanceState) {
    getApplicationInfo().targetSdkVersion = 14; // To disable the 3-dot menu call this code before super.OnCreate
    super.onCreate(savedInstanceState); 
}

Testé sur Android 4.x.x et Android 3.0

2
user3866289

Je veux juste améliorer la réponse @war_hero. Si vous souhaitez définir la visibilité sur l'exécution, vous pouvez utiliser le paramètre de menu oncreateoptions comme celui-ci

Menu overflow;

 @Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.mymenu, menu);
    this.overflow = menu;
    return super.onCreateOptionsMenu(menu);
}

puis créez une fonction pour afficher ou masquer tout élément de menu en fonction de l'index. par exemple.

public void hideorShowMenuItems(boolean bool){
   overflow.getItem(1).setVisible(bool);
   overflow.getItem(2).setVisible(bool);
   overflow.getItem(3).setVisible(bool);
   overflow.getItem(4).setVisible(bool);
   overflow.getItem(5).setVisible(bool);
}
2
codepeaker

Copiez collez ce code dans main.xml dans le dossier de menu dont vous avez juste besoin pour rendre l'élément Android: visible = "false"

    <?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:id="@+id/action_settings"
        Android:orderInCategory="100"
        Android:visible="false"
        Android:title="@string/action_settings"
        app:showAsAction="never" />
</menu>
2
Karan Shaw

Si MainActivity est

classe publique MainActivity étend AppCompatActivity

Dans MainActivity Class, supprimez le code ci-dessous.

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
1
Rijul Sudhir

Si vous souhaitez simplement masquer le bouton, cette solution est un peu un hack mais fonctionne sur toutes les versions de Android (en utilisant AppCompat) et n'affecte pas vos autres éléments de menu:

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
    ...
    <item name="Android:actionOverflowButtonStyle">@style/AppTheme.Overflow</item>
    <!-- If you're using AppCompat, instead use -->
    <item name="actionOverflowButtonStyle">@style/AppTheme.Overflow</item>
</style>

<style name="AppTheme" />
<style name="AppTheme.Overflow">
    <item name="Android:src">@null</item>
</style>

Si vous souhaitez que le bouton Débordement soit masqué uniquement sur certains écrans, vous pouvez en faire un thème alternatif (changez AppTheme ci-dessus en AppTheme.NoOverflow) que seules certaines activités utilisent:

AndroidManifest.xml

<activity Android:name=".NoOverflowActivity"
          Android:theme="@style/AppTheme.NoOverflow" >

Cela rend simplement l'icône sans largeur ni hauteur. Je recommande rarement de s'opposer aux directives de conception, mais dans mon scénario, nous avons utilisé du matériel dédié qui ne signalait pas correctement la présence d'un bouton de menu.

1
Stephen Kidson

Devrait être:

<item
    Android:id="@+id/linearlayout_splash"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:visible="false"
    Android:title="@string/action_settings"/>
1
Vachy

Fais-le comme ça.

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // if nav drawer is opened, hide the action items
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(leftDrawer);
    return (!drawerOpen);
}

Je vérifie si mon tiroir de navigation est visible, je cacherai le menu et vice versa. Vous pouvez l'utiliser selon vos besoins. J'espère que cela t'aides. Codage heureux. :)

0
Atul O Holic

C'est ainsi que je trouve ma solution. Cela peut être utile.

@Override
public boolean onKeyDown(int keycode, KeyEvent event ) {
    //KEYCODE_MENU
 if(keycode == KeyEvent.KEYCODE_MENU){
 /* AlertDialog.Builder dialogBuilder 
  = new AlertDialog.Builder(this)
  .setMessage("Test")
  .setTitle("Menu dialog");
  dialogBuilder.create().show();*/
  return true;

//  finish();
 }
 return super.onKeyDown(keycode,event);  
}
0
Bay

Je viens d'utiliser

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

Où R.menu.main est seulement un menu vide xml

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android" ></menu>
0
Analizer