8

重複の可能性:
ActionBarSherlock & HoloEverywhere - オーバーフローを強制しますか?

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"/>

オーバーフロー メニューを表示したいので、提案してください。よろしくお願いします。

4

1 に答える 1

15

注:この提案では、ForceOverFlow の使用をどの読者にもお勧めしません。これは単にそれを機能させる可能性をリストしているだけです (むしろ強制的に機能させます)。それぞれ自分自身に。欲しくて好きな人もいるかもしれません。他の人はそうではないかもしれません。

私はおそらく推測していますが、おそらく、これでうまくいくかもしれません。

これはハックと考えることができますが、以前に私のアプリの 1 つでオーバーフロー メニューを強制するために使用しましたが、機能しました。

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による 2 番目のリンクには、私の回答が含まれているような解決策があります。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 が指摘したように、デモ サンプル APK は、実際には、アクション バーで ForceOverFlow を実行しますAction Modes。github で関連する Java ファイルを確認した後、その答えはおそらく 3 つの Java ファイルにあると感じています。

  1. アクティビティは非常に型破りな方法でActionModes追加されます: https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/demos/src/com/actionbarsherlock/sample/demos/ActionModes.java (53 行目)menu items
  2. ActionModeABS ライブラリのJava ファイル: https://github.com/JakeWharton/ActionBarSherlock/blob/master/library/src/com/actionbarsherlock/view/ActionMode.java
  3. ABS ライブラリのMenuItem一部である Java ファイル: https://github.com/JakeWharton/ActionBarSherlock/blob/master/library/src/com/actionbarsherlock/view/MenuItem.java
于 2012-11-09T11:51:50.697 に答える