Java 具有自定义标题的android应用程序的3点设置菜单
在android应用程序中, 如果创建一个新项目 然后在需要的手机上自动创建3点设置菜单 它的处理方式与旧版本中的处理方式相同: 如果创建自定义标题,则必须自己添加3点菜单 我如何知道何时需要它?指没有设置按钮的手机 另外,如何创建自定义并附加到3点按钮的上下文菜单 编辑: 在与Shobhit Puri讨论之后,我了解到我没有考虑actionbar,因为我使用的是最低API 8,我没有它 因此,Commonware提供了一个选项来检查设置菜单是否存在(我仍然需要检查它是否存在于API 8中) Shobhit Puri的建议是:Java 具有自定义标题的android应用程序的3点设置菜单,java,android,settings,contextmenu,Java,Android,Settings,Contextmenu,在android应用程序中, 如果创建一个新项目 然后在需要的手机上自动创建3点设置菜单 它的处理方式与旧版本中的处理方式相同: 如果创建自定义标题,则必须自己添加3点菜单 我如何知道何时需要它?指没有设置按钮的手机 另外,如何创建自定义并附加到3点按钮的上下文菜单 编辑: 在与Shobhit Puri讨论之后,我了解到我没有考虑actionbar,因为我使用的是最低API 8,我没有它 因此,Commonware提供了一个选项来检查设置菜单是否存在(我仍然需要检查它是否存在于API 8中) S
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(...) ;
ActionBar ab = getActionBar();
ab.setTitle("My Title");
ab.setSubtitle("sub-title") ;
但是,内核需要API 11或支持库V7
不管怎样,我都不同意Shobhit Puri的回答,因为他的帮助,当我知道我的最终解决方案有效时,我会发布我的最终解决方案
还感谢Commonware提供了一个很好的答案
Edit2:
我决定现在使用Commonware解决方案,我这样写:
if (android.os.Build.VERSION.SDK_INT >= 14) {
ViewConfiguration vc = ViewConfiguration.get(this);
if (!vc.hasPermanentMenuKey()) {
setting_dots.setVisibility(View.VISIBLE);
setting_dots.setOnClickListener(this);
registerForContextMenu(setting_dots);
}
}
理想情况下,我认为您应该使用actionbar,因为它为您提供了大部分工作,但它与API 8存在许多兼容性问题,目前我宁愿避免使用,因为@dumazy指出,actionbar的菜单溢出图标仅显示在没有硬件菜单按钮的设备上 我如何知道何时需要它?指没有设置按钮的手机 这是由安卓自己处理的。你不必担心 如何创建自定义并附加到3点按钮的上下文菜单 您只需在
res
中的菜单
文件夹中放置一个xml文件即可。然后,可以在MenuInflater中指定xml文件。例如:
让我们把它命名为list\u menu.xml
?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_item_1"
android:title="@string/menu_string_1"
android:showAsAction="ifRoom|withText"/>
<item android:id="@+id/menu_item_1"
android:title="@string/menu_string_2"
android:showAsAction="ifRoom|withText"/>
</menu>
此菜单将附加到溢出图标,并包含单击时要显示的项目。有一些类似的黑客可以在所有设备上显示溢出图标,但使用它们是非常不鼓励的。让android自己来处理这个问题
您似乎使用了标题栏。相反,尝试使用相同的操作栏
希望这能回答你的问题 正如@dumazy指出的那样,操作栏的菜单溢出图标仅显示在没有硬件菜单按钮的设备上 我如何知道何时需要它?指没有设置按钮的手机 这是由安卓自己处理的。你不必担心 如何创建自定义并附加到3点按钮的上下文菜单 您只需在
res
中的菜单
文件夹中放置一个xml文件即可。然后,可以在MenuInflater中指定xml文件。例如:
让我们把它命名为list\u menu.xml
?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_item_1"
android:title="@string/menu_string_1"
android:showAsAction="ifRoom|withText"/>
<item android:id="@+id/menu_item_1"
android:title="@string/menu_string_2"
android:showAsAction="ifRoom|withText"/>
</menu>
此菜单将附加到溢出图标,并包含单击时要显示的项目。有一些类似的黑客可以在所有设备上显示溢出图标,但使用它们是非常不鼓励的。让android自己来处理这个问题
您似乎使用了标题栏。相反,尝试使用相同的操作栏
希望这能回答你的问题
我如何知道何时需要它?指没有设置按钮的手机
在视图配置上
另外,如何创建自定义并附加到3点按钮的上下文菜单
通过编程。由于您没有使用操作栏,因此不可能给出相关的具体建议
我如何知道何时需要它?指没有设置按钮的手机
在视图配置上
另外,如何创建自定义并附加到3点按钮的上下文菜单
通过编程。由于您没有使用操作栏,因此无法向您提供相关的具体建议。谷歌表示,操作栏溢出仅出现在没有菜单硬件键的手机上。带有菜单键的手机在用户按键时会显示动作溢出。
如果您仍然想实现此功能,可以遵循此解决方案
单击此处以供参考
只需在活动中复制此方法,并从onCreate方法调用该方法
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();
}
}
谷歌表示,Actionbar溢出仅出现在没有菜单硬件键的手机上。带有菜单键的手机在用户按键时会显示动作溢出。 如果您仍然想实现此功能,可以遵循此解决方案 单击此处以供参考 只需在活动中复制此方法,并从onCreate方法调用该方法
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();
}
}
只有当设备上没有物理菜单按钮时,才会显示3点菜单。如果您的菜单项具有“android:showInAction=“never””,则该项将显示在3点菜单中。3点菜单仅在设备上没有物理菜单按钮时显示。如果您的菜单项具有“android:showInAction=“never””,则该项将显示在3点菜单中。您尝试过此操作,但无法使其工作。你们知道我使用的是自定义标题吗?当你们点击设备上的
菜单按钮时,是否有任何错误或没有打开菜单?有按钮吗?很抱歉,混淆了,但我问您的设备上是否有菜单
按钮?我正在两台设备上进行测试,我感兴趣的是没有菜单按钮的设备。凯,所以您的问题是,在没有菜单按钮的设备上,它不会显示。我已经尝试过,但无法使其工作。你们知道我使用的是自定义标题吗?当你们点击设备上的菜单按钮时,是否有任何错误或没有打开菜单?有吗