如何在Actionbar上使用Actionbarsherlock强制溢出菜单< 4.0设备

时间:2012-11-09 11:23:52

标签: android android-actionbar actionbarsherlock

  

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

我正在使用ActionbarSherLock库在预姜饼设备上显示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"/>

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

1 个答案:

答案 0 :(得分:15)

注意:有了这个建议,我建议对任何读者使用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实际上是ForceOverFlow Action Modes中的操作栏。在检查github上的相关Java文件之后,我有一种感觉,答案可能就是3个Java文件。

  1. 活动ActionModes以非常规方式添加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