2012-02-09 105 views
38

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

我在清单中运行的应用程序为<uses-sdk android:minSdkVersion="5"/>,代码编译为4.0。每个屏幕上都显示三点指示符。

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

在清单中加入android:targetSdkVersion="14"它的工作原理。但是,不要在所有屏幕上隐藏/删除三个点按钮。只有偏好活动不希望显示这三个点按钮。

+0

你一定要读的http:// android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html如果你还没有... – 2012-02-09 22:40:17

+2

是的。我读过它。我仍然想在ICS手机上使用溢出按钮,而不是短期实施操作栏以支持用户。似乎没有办法在某些屏幕上删除溢出按钮,而不使用此属性“android:targetSdkVersion =”14“”清单。即使没有选项,偏好活动溢出按钮也会显示。 – user1198982 2012-02-09 23:08:25

+0

@ user1198982是否曾为此问题找到解决方案,我也想在没有选项时将其删除? – MikeIsrael 2012-05-16 18:51:05

回答

9

没有办法显示/隐藏单点活动的“三点”菜单指示器。您可以通过在清单文件中指定android:targetSdkVersion =“14”(或以上)来隐藏此菜单指示器仅适用于整个应用程序。

但是,此菜单指示符是而不是显示偏好活动,如果它从本地android.preference.PreferenceActivity类延伸。我在几个应用程序中实现了这个场景,并且它完美地工作。

我假设您正在使用一些不偏离PreferenceActivity的自定义首选项实现。 Android开发团队建议始终使用PreferenceActivity来处理应用程序中的任何偏好。

+4

改变sdk不应该是答案,我猜。有时候,你应该使用某些sdks。 – alicanbatur 2013-05-28 10:43:58

29

覆盖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);命令

+10

对我来说,它是'R.id.action_settings'而不是'R.id.menu_settings'。 – 2015-09-17 17:18:58

20

我刚刚删除的方法:

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

那么这三个点 - 菜单消失(:


希望它有帮助。

+1

如果您使用其他图标的操作栏,这将无法使用,因为它会禁用操作栏中的所有图标。 – Azurespot 2014-07-11 03:49:33

4

以下代码适用于我的应用程序。试图对三星Galaxy S4(Android 4.3以上)和Nexus 4(安卓4.2):

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

但是这会显示一次菜单图标,当你点击两次它会消失吗?或者当活动加载时它不会显示出来? – NinjaCoder 2013-12-20 13:42:41

0

像这样做。

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

我检查,如果我的抽屉式导航栏是可见的,我会隐藏菜单,反之亦然。您可以根据您的要求使用它。希望这可以帮助。快乐编码。:)

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

实际上,你可以改变的Android targetVersion从而迫使3点菜单隐藏或显示。你需要重写的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); 
} 

测试在3.0

+0

这对我来说是完美的解决方案(摆脱3个点)。我在一个较老的应用程序中使用它,目标是2.3,并且它在模拟器中工作没有问题。在我的4.4真实设备和2.3.3真实设备上工作。谢谢! – Richard 2015-09-24 00:00:08

0

我只是用

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

的Android 4.XX和Android哪里R.menu.main只是一个空菜单xml

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

与以前的响应相同,如果您有其他图标,则此功能无用... – ziniestro 2014-11-20 23:49:20

+0

这是真的,我并不需要任何图标在动作栏中 – Analizer 2014-11-21 10:13:21

4

重写方法并返回false记得不叫超级

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

如果您有其他图标,则此功能无用... – ziniestro 2014-11-20 23:48:47

4

删除res/menu/main.xml

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

另外这个项目:做不加showAsAction="never"的项目 - 这将避免展示点。如果您的物品多于无法一次显示的物品,点将会再次出现(并且它们是标记为ifRoom的物品)。

+0

Can你在这里想要说些什么?目前还不清楚这是如何回答这个问题的。 – Codeman 2015-02-05 23:34:44

+0

这是一个很好的解决方案。惊讶的是,它没有upvoted更多。 setvisible(false)解决方案对我无效。您也可以根据需要添加其他操作项目。 – everydayapps 2015-05-05 14:28:06

13
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
     return false; 
} 
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; 
} 
2

太晚党在这里,我试图删除我的所有菜单项和3点(选项菜单指示),我做的不同于这里给出的解决方案,我很惊讶没有人告诉过它。 有可以设置为false可视性标记和没有活性的改变的代码需要visibility=false的伎俩

在res /菜单

/..

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

应该是:

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

如果你只是想隐藏按钮,这个解决方案有点破解,但适用于所有版本的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" > 

这实际上只是使图标有没有宽度和高度。我很少推荐反对设计准则,但在我的情况下,我们使用了没有正确报告菜单按钮的专用硬件。

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

只是想改进@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); 
} 
2

复制粘贴此代码main.xml中的菜单文件夹 你只需要进行项目的android:可见= “假”

<?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> 
0
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 
    }