Как отключить/скрыть трехточечный индикатор (индикатор меню опций) на телефонах ICS

36 user1198982 [2012-02-09 09:44:00]

Как отключить/скрыть трехточечный индикатор (индикатор меню опций) на телефонах ICS, у которых нет кнопки меню.

Я запускаю приложение как <uses-sdk android:minSdkVersion="5"/> в манифесте, код скомпилирован с помощью 4.0. На каждом экране отображается индикатор с тремя точками.

Пример для действий с предпочтениями я не хочу показывать индикатор с тремя точками, так как он не имеет никаких параметров меню.

Добавление android:targetSdkVersion="14" в манифест работает. Однако не нужно скрывать/удалять три точки на всех экранах. Только в настройках предпочтения не хотят показывать эту кнопку с тремя точками.

android android-4.0


19 ответов


29 Asaf Manassen [2012-09-03 23:52:00]

Переопределить onPrepareOptionsMenu() в фрагменте предпочтения следующим образом:

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

если у вас есть более одного элемента, установите для всех флажков видимости элементов значение false

и добавьте команду setHasOptionsMenu(true); к команде onCreate

после того, как вы измените всю видимость элементов на false, меню исчезнет

для активности, единственное отличие - это onPrepareOptionsMenu is boolean, и вам не нужно добавлять команду setHasOptionsMenu(true); при создании


19 alicanbatur [2013-04-11 14:28:00]

Я просто удалил метод:

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

тогда это трехточечное меню уходит (:


Надеюсь, что это поможет.


13 dnocode [2015-02-09 13:53:00]

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

9 HitOdessit [2012-08-31 13:14:00]

Невозможно показать/скрыть "трехточечный" индикатор меню для одного действия. Вы можете скрыть этот индикатор меню только для всего приложения, указав андроид: targetSdkVersion = "14" (или выше) в файле манифеста.

Однако этот индикатор меню не показывает активность предпочтений, если он распространяется из класса android.preference.PreferenceActivity. У меня этот сценарий реализован в нескольких моих приложениях, и он отлично работает.

Я предполагаю, что вы используете некоторые пользовательские настройки предпочтений, которые не распространяются на PreferenceActivity. Android Dev Team предлагает всегда использовать PreferenceActivity для любых настроек в ваших приложениях.


4 David T. Nguyen [2013-11-14 02:17:00]

Следующий код работал для моего приложения. Пробовал Samsung Galaxy S4 (Android 4.3) и 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 Weverton Souza [2015-02-06 02:25:00]

Удалить этот элемент в res / menu / main.xml

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

Кроме того: не добавлять элемент с showAsAction="never" - это позволит избежать отображения точек. Если у вас есть больше предметов, чем не может быть показано сразу, точки снова будут там (и они будут помечены как ifRoom).


4 dnocode [2014-10-23 00:22:00]

метод переопределения и возврат false помнить о не вызове super

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

2 user3866289 [2014-07-28 19:28:00]

Фактически вы можете изменить Android targetVersion, заставив меню с тремя точками либо скрыть, либо показать. Вы должны переопределить onCreate своей деятельности следующим образом:

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

Протестировано на Android 4.x.x и Android 3.0


2 GCoe [2015-04-09 00:36:00]

Я просто исключил метод 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 war_Hero [2015-07-09 08:59:00]

Слишком поздно для вечеринки здесь, я пытался удалить все пункты меню и 3-точки (индикатор меню опций), я сделал иначе, чем приведенное здесь решение. Я удивлен, что никто не сказал об этом. Существует тег видимости, который может быть установлен в false и не требуется изменение кода в активности visibility=false делает трюк

в res/menu/..

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

1 codepeaker [2017-02-17 08:24:00]

Просто хочу улучшить ответ @war_hero. Если вы хотите установить видимость во время выполнения, вы можете использовать параметр меню oncreateoptions, подобный этому

Menu overflow;

 @Override
public boolean onCreateOptionsMenu(Menu menu) {

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

а затем создайте функцию для отображения или скрытия любого пункта меню в соответствии с индексом. например,

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

1 user2557156 [2015-07-17 12:06:00]

Должно быть:

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

1 Karan Shaw [2017-04-16 01:59:00]

Скопируйте этот код в файл main.xml в папке меню вам просто нужно сделать элемент 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>

1 Rijul Sudhir [2016-04-28 12:58:00]

Если MainActivity

открытый класс MainActivity расширяет AppCompatActivity

В классе MainActivity снимите код ниже.

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

0 Atul O Holic [2014-02-08 09:53:00]

Сделайте это так.

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

Я проверяю, видим ли мой навигационный ящик, я скрою меню и наоборот. Вы можете использовать его в соответствии с вашим требованием. Надеюсь это поможет. Счастливое кодирование.:)


0 Bay [2014-04-05 00:16:00]

Вот как я нахожу свое решение. Это может быть полезно.

@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 Stephen Kidson [2015-08-04 23:59:00]

Если вы просто хотите скрыть кнопку, это решение немного взломано, но работает во всех версиях Android (с помощью AppCompat) и не влияет на другие ваши пункты меню:

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>

Если вы хотите, чтобы кнопка переполнения была скрыта только на некоторых экранах, вы можете сделать это альтернативной темой (изменить AppTheme выше на AppTheme.NoOverflow), которую используют только определенные действия:

AndroidManifest.xml

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

Это фактически просто означает, что значок не имеет ширины и высоты. Я редко рекомендую противопоставлять рекомендации по дизайну, но в моем сценарии мы использовали выделенное оборудование, которое не сообщило о необходимости нажатия кнопки меню.


0 Kishore Reddy [2017-12-15 09:06:00]

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
    }

0 Analizer [2014-09-27 16:42:00]

Я просто использовал

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

Где R.menu.main - это только пустое меню xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" ></menu>