【问题标题】:how to force overflow menu in Actionbar using Actionbarsherlock on < 4.0 devices [duplicate]如何在< 4.0设备上使用Actionbarsherlock强制Actionbar中的溢出菜单[重复]
【发布时间】:2012-11-09 21:12:18
【问题描述】:

可能重复:
ActionBarSherlock & HoloEverywhere - Forcing Overflow?

我正在使用 ActionbarSherLock 库在 Gingerbread 之前的设备上显示 Actionbar..

我想要操作栏上的溢出菜单..我搜索了很多,我知道有硬件菜单按钮的设备然后溢出菜单将不会显示..

我还查看了该解决方案的 ActionbarSherlock 示例演示,但我仍然无法获得解决方案..

我已经为操作栏创建了演示,当在没有菜单按钮的设备上模拟时,它将显示溢出菜单,但如果设备有菜单按钮,则溢出菜单将不会显示..

以下是我的配置:-

 public class MainActivity extends SherlockActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.Theme_Sherlock);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater=getSupportMenuInflater();
        inflater.inflate(R.menu.activity_main, menu);

//        return true;
        return super.onCreateOptionsMenu(menu);
    }
}

清单:-

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="demo.menu.actionbar_using_lib"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15" />

 <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.Sherlock"
     >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" 
       >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

菜单配置:-

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

<item android:id="@+id/save"
    android:title="@string/menu_save"
    android:icon="@drawable/ic_action_search"
    android:showAsAction="ifRoom|withText"/>

 <item android:id="@+id/setting"
    android:title="@string/menu_settings"
    android:icon="@drawable/ic_action_search"
    android:showAsAction="ifRoom|withText"/>


  <item android:id="@+id/search"
    android:title="@string/menu_search"
    android:icon="@drawable/ic_action_search"
    android:showAsAction="never"/>


   <item android:id="@+id/refresh"
    android:title="@string/menu_refersh"
    android:icon="@drawable/ic_action_search"
    android:showAsAction="never"/>

    <item android:id="@+id/edit"
    android:title="@string/menu_edit"
    android:icon="@drawable/ic_action_search"
    android:showAsAction="never"/>


     <item android:id="@+id/delete"
    android:title="@string/menu_delete"
    android:icon="@drawable/ic_action_search"
    android:showAsAction="never"/>

我想显示溢出菜单..所以请建议我.. 在此先感谢..

【问题讨论】:

  • @MisterSmith:你在那个链接上打败了我。 ;-)
  • @KinjalShah:你用的是什么版本的 ABS?
  • @MisterSmith 仅供参考,我也看过这个链接,我使用 android:theme="@style/Theme.Sherlock.ForceOverflow" 但它给了我错误..你还有其他解决方案吗??
  • @SiddharthLele 我正在使用最新版本的 ABS..

标签: android android-actionbar actionbarsherlock


【解决方案1】:

注意:有了这个建议,我向任何读者推荐使用 ForceOverFlow。这只是列出了使其工作的可能性(而是强制它工作)。各有各的。有些人可能想要它并且也喜欢它。其他人可能不会。

我可能是在猜测,但也许,这可能对你有用。

你可以认为这是一个hack,但我之前使用它来强制我的一个应用程序中的溢出菜单并且它有效。

try {
    ViewConfiguration config = ViewConfiguration.get(MainPage.this);
    Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
    if (menuKeyField != null) {
        menuKeyField.setAccessible(true);
        menuKeyField.setBoolean(config, false);
    }
} catch (Exception e) {
    e.printStackTrace();
}

另外,MisterSmith 的第二个链接有一个解决方案,其中包含我的答案。 Commonsware 已经考虑过在此处强制使用 OverFlow 菜单:How To Control use of OverFlow Menu in ICS

编辑:在输入此建议时,您添加了评论。作为回应,我想指出 Jake Wharton 推出了 .ForceOverFlow 主题。我还没有尝试过使用 4.2.0 版本,但是使用自定义主题,它可能会起作用。如果您绝对必须使用 ForceOverFlow,则可能必须使用旧版本。在这里阅读我的答案:https://stackoverflow.com/a/13180285/450534。有些东西可能会让它发挥作用。

编辑 2:正如 OP 在评论中指出的那样,Demos Sample APK 实际上在 Action Modes 中执行 ForceOverFlow 操作栏。在查看了 github 上的相关 Java 文件后,我有一种感觉,答案可能在于 3 个 Java 文件。

  1. ActionModes Activity 以非常规的方式添加了menu itemshttps://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/demos/src/com/actionbarsherlock/sample/demos/ActionModes.java(第 53 行)
  2. ABS 库中的ActionMode Java 文件:https://github.com/JakeWharton/ActionBarSherlock/blob/master/library/src/com/actionbarsherlock/view/ActionMode.java
  3. MenuItem Java 文件又是 ABS 库的一部分:https://github.com/JakeWharton/ActionBarSherlock/blob/master/library/src/com/actionbarsherlock/view/MenuItem.java

【讨论】:

  • 我已经使用上面的代码并在 4.0 设备上模拟,它显示溢出菜单(虽然它有菜单按钮)但是当我在 2.3.3 设备上模拟时,不显示溢出菜单...跨度>
  • @KinjalShah:我怀疑这可能是因为必要的主题已从新版本 4.2.1 中删除
  • 我读了你的回答,我知道我必须做什么..但我仍然困惑我应该使用旧版本的 ABS 吗?
  • 嗯,首先,您必须意识到使用旧版本的陷阱。阅读ChangeLog。新版本中有几个修复。如果它们对您的应用程序的功能不重要,那么我认为值得一试。但你必须真的问自己这个。 ForceOverFlow 真的值得吗?
  • 好的,你是对的...非常感谢...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
相关资源
最近更新 更多