【问题标题】:Items in ActionBarCompat are showed always in OverflowActionBarCompat 中的项目总是显示在溢出中
【发布时间】:2013-08-29 10:35:56
【问题描述】:

我在我的应用程序中使用 ActionBarCompat,我想在操作栏中显示一两个项目

我遵循了谷歌开发者的指南,但是当我测试它时,项目显示在“溢出”选项中(在 Nexus 4 中),如果我点击菜单按钮(例如 Galaxy S3)

我做错了什么?

找到解决方案

您可以在答案中找到它。

【问题讨论】:

  • 最好将解决方案作为实际答案发布。
  • @MarkCarter 在“很少”时间之后.. 我看到了您的请求,并且我已经编辑了我的帖子以将问题分开以获得答案。感谢(有点晚)的建议。

标签: android menu android-actionbar


【解决方案1】:

我遇到了同样的问题,找到了两种解决方案:

在菜单 xml (Login.xml) 中,使用您的应用名称作为 showAsAction 标签:

代替:

<item
    android:id="@+id/action_register"
    android:showAsAction="always"
    android:icon="@drawable/some_icon"
    android:title="@string/login_menu_register" />

使用:

<item
    android:id="@+id/action_register"
    yourappname:showAsAction="always"
    android:icon="@drawable/some_icon"
    android:title="@string/login_menu_register" />

我想你的应用程序的名字是可疑的。

我的第二个解决方案,在活动类上,在 onCreateOptionsMenu()

public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(
    getMenuInflater().inflate(R.menu.main, menu);
    MenuItem registerMenuItem = menu.findItem(R.id.action_register);
    registerMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); // change this in backcompat
    return true;
}

如果您使用的是 backCompatibility,请更改最后一行:

MenuItemCompat.setShowAsAction(registerMenuItem,MenuItemCompat.SHOW_AS_ACTION_ALWAYS);

【讨论】:

  • 以编程方式调用setShowAsAction 是我需要的魔法酱。我想知道为什么 XML 不起作用。
  • 在我的一些 xml 中使用 app compat 时,需要前缀 android 有时不需要,具体取决于正在运行的 android 版本。据我记得, android:background 在 android
【解决方案2】:

我认为您需要为这些操作提供图标,以便它们可以显示在操作栏中。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:shudy="http://schemas.android.com/apk/res-auto" >

<item
    android:id="@+id/action_register"
    android:showAsAction="always"
    android:icon="@drawable/some_icon"
    android:title="@string/login_menu_register" />
<item
    android:id="@+id/action_register2"
    android:showAsAction="always"
    android:icon="@drawable/some_icon2"
    android:title="miau" />

</menu>

【讨论】:

  • 不起作用:S,但我找到了解决方案;)我将编辑我的答案以供所有人使用
【解决方案3】:

问题已更新以包含答案,但对于任何对官方文档感兴趣的人,请参阅 http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems 并特别注意有关为 showAsAction 属性使用自定义命名空间的说明。

【讨论】:

    【解决方案4】:
    <item
        android:id="@+id/ok"
        android:icon="@drawable/ic_ok"
        android:orderInCategory="0"
        android:showAsAction="ifRoom"
        android:title="OK"/>
    

    【讨论】:

      【解决方案5】:

      我们有两种方法可以解决这个问题。

      1. 您需要添加库“ActionBarSherlock”。这是ActionbarSherlock 的用法。

      或 2.您需要添加库“android-Support-v7”。如果你选择这个方法,那么你的 menu.xml 需要这样:

      <?xml version="1.0" encoding="UTF-8"?>
      <menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:v7="http://schemas.android.com/apk/res-auto" >
      <item
          android:id="..."
          android:icon="..."
          android:showAsAction="always"
          android:title="..."
          v7:showAsAction="always"/>
      </menu>
      

      【讨论】:

        【解决方案6】:

        这也适用于 AppCompat-v21 和 API 级别 21 及以上的新材料设计概念中的 Android 工具栏。

        【讨论】:

          【解决方案7】:

          我找到了解决方案,所以我发布了答案:

          找到解决方案

          在菜单的 xml 中,您必须放置新的命名空间,以使 actionbarcompat 工作。所以有些选项需要这个空间名而不是“android”。所以解决方案是这样的:

          旧的登录菜单:

              <item
                  android:id="@+id/action_register"
                  android:showAsAction="always"
                  android:title="@string/login_menu_register"/>
          

          新的登录菜单(解决方案)(看看“showAsAction”是怎么命名的)

              <item
                  android:id="@+id/action_register"
                  shudy:showAsAction="always"
                  android:title="@string/login_menu_register"/>
          

          Login.xml(菜单)

          <item
              android:id="@+id/action_register"
              android:showAsAction="always"
              android:title="@string/login_menu_register"/>
          <item
              android:id="@+id/action_register2"
              android:showAsAction="always"
              android:title="miau"/>
          

          LoginActivity.java

          protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  SLog.d(CLASS_NAME + " onCreate()");
                  setContentView(R.layout.activity_login);
                  actionBar = getSupportActionBar();
                  actionBar.setDisplayHomeAsUpEnabled(true);
                  actionBar.setHomeButtonEnabled(true);
                  findViews();
                  buttons();
          
              }
          
              @Override
              public boolean onCreateOptionsMenu(Menu menu) {
                  // Inflate the menu; this adds items to the action bar if it is present.
                  getMenuInflater().inflate(R.menu.login, menu);
                  return true;
              }
          

          清单

          <application
                  android:allowBackup="true"
                  android:icon="@drawable/ic_launcher"
                  android:label="@string/app_name"
                  android:theme="@style/Theme.AppCompat.Light.DarkActionBar" >
                  <activity
                      android:name="com.shudy.myworld.LoginActivity"
                      android:label="@string/app_name" >
                      <intent-filter>
                          <action android:name="android.intent.action.MAIN" />
          
                          <category android:name="android.intent.category.LAUNCHER" />
                      </intent-filter>
                  </activity>
              </application>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-08-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多