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.
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
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.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return false;
}
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.
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"/>
remplacer la méthode et retourner faux rappelez-vous de ne pas appeler super
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return false;
}
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
).
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;
}
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
}
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;
}
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
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);
}
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>
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);
}
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.
Devrait être:
<item
Android:id="@+id/linearlayout_splash"
Android:orderInCategory="100"
Android:showAsAction="never"
Android:visible="false"
Android:title="@string/action_settings"/>
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. :)
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);
}
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>