【问题标题】:Items getting added to "overflow menu" instead of the ActionBar项目被添加到“溢出菜单”而不是 ActionBar
【发布时间】:2016-06-23 23:51:31
【问题描述】:

我一直在尝试从书中实现一个小型应用程序,其中包括将项目添加到操作栏。出现的问题是项目被添加到溢出菜单列表中(右上角带有三个点的图标),而不是主操作栏(应该在哪里)。

这是 menu_main 文件-

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context = ".MainActivity"
xmlns:app="http://schemas.android.com/apk/res-auto">

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

<item
    android:id="@+id/action_create_order"
    android:title="@string/action_create_order"
    android:icon = "@drawable/create_order"
    android:orderInCategory="1"
    app:showAsAction="ifRoom"
    />

这是 MainActivity 代码-

package com.newboston.bitsandpizzas;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.content.Intent;

public class MainActivity extends Activity {

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
        case R.id.action_create_order:
            Intent intent = new Intent(this,OrderActivity.class);
            startActivity(intent);
            return true;
        case R.id.action_settings:
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

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

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
}

我尝试将两者的 showAsAction 设置为“始终”,但问题仍然存在。

(模拟器是bluestacks)

【问题讨论】:

  • 您的操作栏中是否有用于菜单项的空间?如果您没有空间,即使输入“总是”也无法解决问题。
  • @user3331142 是的……ActionBar 只有带有应用图标的应用名称。我上传了截图,你可以看看。
  • 这很奇怪。我获取了您的代码并在我正在使用的工作应用程序中使用它并显示了图标。
  • 会不会和模拟器有关系?我正在使用 bluestacks。
  • 我会使用另一个模拟器来测试它。 Genymotion 提供免费仿真供个人使用。或者,Android Studio 模拟器现在实际上相当不错。当然,如果你能拿到真正的 Android 设备,那将是最有帮助的

标签: android android-actionbar android-menu


【解决方案1】:

根据您的屏幕尺寸和操作栏标题,您可能没有足够的空间来显示两个菜单选项项。即使您将两者都设置为 'ifRoom' 推荐而不是 'always',如果没有空间,菜单项将显示在溢出菜单项中。

您可以通过以下方式来验证这一点:在更大的屏幕尺寸和更多可用的菜单项空间中检查您的布局,缩短操作栏标题以腾出更多空间,或者观察水平方向的菜单项布局以查看问题仍然存在。

如果这不是问题,请发布当您将两个项目都设置为“ifRoom”时您的操作栏如何显示的屏幕截图,并发布有关如何创建和扩展选项菜单的代码。

请记住,菜单项布局会因设备而异。因为屏幕尺寸较大的设备可以在主操作栏中显示更多菜单项。 希望这可以帮助。

【讨论】:

  • 感谢您的回答。我发布了屏幕截图和通货膨胀代码。你可以检查一下。
  • 你在手机或Android Studio模拟器上测试过吗?而且由于您的类扩展了 Activity,请尝试使用 android:showAsAction 而不是 app:showAsAction。
  • 哦!这解决了!我做了更多阅读并了解到在使用 Activity 时它应该是 app: 而不是 android: 但应用程序仍然给出这个错误(即使它运行完美)-“应该使用 app:showAsAction 和 appcompat 库xmlns:app="schemas.android.com/apk/res-auto" less... (Ctrl+F1) 使用 appcompat 库时,菜单资源应参考 app: 命名空间中的 showAsAction,而不是 android: 命名空间。同样,不使用 appcompat 时库,您应该使用 android:showAsAction 属性。"
  • 很高兴它成功了!如果它对您有所帮助,如果您能接受答案,那就太好了。
  • 哦,是的,我的错。我是新人:)
猜你喜欢
  • 2014-05-14
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多