我有点困惑。我想在三点项目中显示操作栏的其余项目。但是当物品数量增加时我总是会失去它!谷歌搜索后,我发现这个“有用”的方法:ASMUIRTI ANSWER
private void getOverflowMenu() {
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception e) {
e.printStackTrace();
}
}
我按照自己的意愿测试了它。不幸的是,为了更好地理解这种方法的作用,我发现它是 an awful hack that breaks consistency with the rest of the apps on the platform (adamp的评论)
有人可以告诉我为什么这是一个黑客,什么是最好的解决方案?
答案 0 :(得分:5)
这很简单。有些设备有其他菜单按钮没有。在带有菜单按钮的设备上,按下菜单按钮时会显示溢出的操作项目,而在按下三个点时不会显示它们。这就是设备制造商如何设计他们的设备,并且任何强迫他们以不同方式进行操作的尝试都被视为“黑客”。这是不一致的,因为同一设备上的其他应用程序的表现方式不同。
这一切都归结为这样一个问题:您是希望跨单个设备在不同设备上保持一致性,还是在单个设备上保持所有应用的一致性。因为应用程序开发最终应该是关于用户的,所以IMO在单个设备上(对于一个用户)的一致性才是最重要的。
处理这个的最好方法是使用android:showAsAction标签让Android决定,如何在ActionBar中显示动作,是否需要溢出菜单,如果是,用户如何访问溢出动作项目
答案 1 :(得分:2)
带有菜单按钮的设备不显示“溢出”菜单。
您使用的代码在较新的设备上可以正常工作,并且会显示溢出(三个点)。 如果有意图,当有菜单按钮时,这些不显示
如果没有肮脏的黑客攻击,很快就会破坏,以便在所有设备上强制使用这些点
答案 2 :(得分:2)
所以,事实证明这很简单,我最近在我的应用中实现了。
需要在溢出菜单中显示的项目,将它们嵌套在一个菜单项下,如下所示:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/empty"
android:orderInCategory="101"
android:showAsAction="always"
android:icon="@drawable/ic_action_overflow">
<menu>
<item
android:id="@+id/action_settings"
android:orderInCategory="96"
android:showAsAction="never"
android:title="@string/menu_settings"
android:icon="@drawable/ic_action_settings"/>
<item
android:id="@+id/action_share"
android:orderInCategory="97"
android:showAsAction="never"
android:title="@string/menu_share"
android:icon="@drawable/ic_action_share"/>
<item
android:id="@+id/action_rate"
android:orderInCategory="98"
android:showAsAction="never"
android:title="@string/menu_rate"
android:icon="@drawable/ic_action_important"/>
<item
android:id="@+id/action_feedback"
android:orderInCategory="99"
android:showAsAction="never"
android:title="@string/menu_feedback"
android:icon="@drawable/ic_action_edit"/>
</menu>
</item>
</menu>
现在,编辑主活动文件,如下所示:
package com.example.test;
//all your import statements go here
Menu mainMenu=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); }
@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);
mainMenu=menu;
return true; }
//Menu press should open 3 dot menu
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_MENU) {
mainMenu.performIdentifierAction(R.id.empty, 0);
return true; }
return super.onKeyDown(keyCode, event); }