49

如何在没有菜单按钮的 ICS 手机上禁用/隐藏三点指示器(选项菜单指示器)。?

<uses-sdk android:minSdkVersion="5"/>在 Manifest 中运行应用程序,代码是用4.0. 三点指示器显示在每个屏幕上。

我不想显示三点指示器的偏好活动示例,因为它没有任何菜单选项。

添加android:targetSdkVersion="14"清单它可以工作。但是不想隐藏/删除所有屏幕上的三个点按钮。只有在偏好活动中不想显示这个三点按钮。

4

19 回答 19

33

用这个覆盖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 后,菜单将消失

在活动上,唯一的区别是onPrepareOptionsMenuboolean不需要setHasOptionsMenu(true);在创建时添加命令

于 2012-09-03T20:52:00.837 回答
27

我刚刚删除了方法:

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

然后那个三点菜单消失(:


希望能帮助到你。

于 2013-04-11T11:28:55.027 回答
17
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
       return false;
 }
于 2015-02-09T10:53:01.557 回答
9

无法显示/隐藏单个活动的“三点”菜单指示器。您可以通过在清单文件中指定android:targetSdkVersion="14" (或更高版本)来仅为整个应用隐藏此菜单指示器。

但是,如果此菜单指示器从本机android.preference.PreferenceActivity类扩展,则它不会显示在首选项活动上。我在我的一些应用程序中实现了这个场景,并且效果很好。

我假设您正在使用一些不从 PreferenceActivity 扩展的自定义首选项实现。Android 开发团队建议始终将 PreferenceActivity 用于应用程序中的任何首选项。

于 2012-08-31T10:14:15.963 回答
6

在这里聚会太晚了,我试图删除我所有的菜单项和 3 点(选项菜单指示器),我所做的与这里给出的解决方案不同,我很惊讶没有人告诉它。有一个可见性标签可以设置为 false 并且不需要更改活动中的代码就 visibility=false可以了

在水库/菜单/..

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    visibility=false
    android:title="@string/action_settings"/>
于 2015-07-09T05:59:35.133 回答
5

删除此项目res / menu / main.xml

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

另外:不要添加具有的项目showAsAction="never"- 这将避免显示点。如果您的项目多于无法一次显示的项目,点将再次出现(并且它们是被标记的项目ifRoom)。

于 2015-02-05T23:25:02.980 回答
5

覆盖方法并返回 false 记住不要调用 super

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    return false;
}
于 2014-10-22T21:22:06.660 回答
4

以下代码适用于我的应用程序。在三星 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;
}
于 2013-11-13T23:17:02.423 回答
3
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
    }
于 2017-12-15T06:06:39.403 回答
2

我刚刚排除了“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;
}
于 2015-04-08T21:36:20.550 回答
2

您实际上可以更改 Android targetVersion,从而强制 3 点菜单隐藏或显示。您需要像这样覆盖 Activity 的 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.xx 和 Android 3.0 上测试

于 2014-07-28T16:28:27.960 回答
2

只是想改进@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);
}
于 2017-02-17T05:24:17.733 回答
2

将此代码复制粘贴到菜单文件夹中的 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>
于 2017-04-15T22:59:32.120 回答
2

如果您只是想隐藏按钮,此解决方案有点小技巧,但适用于所有版本的 Android(使用 AppCompat)并且不会影响您的其他菜单项:

样式.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" >

这实际上只是使图标没有宽度和高度。我很少推荐相反的设计指南,但在我的场景中,我们使用了未正确报告存在菜单按钮的专用硬件。

于 2015-08-04T20:59:26.457 回答
1

应该:

<item
    android:id="@+id/linearlayout_splash"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:visible="false"
    android:title="@string/action_settings"/>
于 2015-07-17T09:06:38.163 回答
1

如果 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);
}
于 2016-04-28T09:58:00.607 回答
0

我刚用

 @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>
于 2014-09-27T13:42:56.673 回答
0

这就是我如何找到我的解决方案。它可能会有所帮助。

@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);  
}
于 2014-04-04T21:16:00.350 回答
0

像这样做。

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

我正在检查我的导航抽屉是否可见,我将隐藏菜单,反之亦然。您可以根据自己的要求使用它。希望这可以帮助。快乐编码。:)

于 2014-02-08T06:53:29.130 回答