web-dev-qa-db-ja.com

Android actionbar compatでオーバーフローメニューを強制する方法は?

Androidアクションバーの互換性
出来ますか?古いデバイス(3.0以前)では、アクションキーに合わないアイテムはメニューキーが押されたときにのみ表示されます。これらのアイテムをアクションバーのオーバーフローメニューにグループ化します。

34
marcosbeirigo

アクションオーバーフローメニューは、デバイスに使用可能なハードメニューボタンがない場合にのみ使用できます。これは、「ユーザーインターフェース」>「アクションバー」の「フレームワークトピック」に記載されていることがわかりました。3番目の箇条書き here を確認してください。

Jake Wharton によって記述されたActionBarSherlockというアクションバーライブラリがあります。おそらくこれは、古いデバイス(ハードメニューボタンを含む)の場合でも、アクションオーバーフローメニュースタイルを提供できるかもしれませんが、これについては調べていません。

編集:ActionBarSherlock 4.0(現在のリリース候補)には、アクションオーバーフローを強制する機能が組み込まれています。 ActionBarCompatの例を自分で拡張したい場合は、githubを調べて、Jakeがどのように実装したかを理解してください。彼のライブラリをすべて一緒に使用することを検討することをお勧めします。

Jakeのライブラリを使用する場合は、Activityテーマを@ style/Theme.Sherlock.ForceOverflowとして設定して、古いデバイスでオーバーフローメニューを強制するようにしてください。

Edit2:ForceOverflowテーマを使用すると、ハードウェアメニューボタンのあるデバイスで問題( 例#1 )が発生します。したがって、Jake Whartonは将来のバージョンでForceOverflowを削除する予定です。

46
esilac

わかりました、これは簡単ですが理解するのが難しいです。

まず、オーバーフローインフレーターとして使用するメニュー項目が必要です。例

<item
        Android:id="@+id/a_More"
        Android:icon="@drawable/more"
        Android:showAsAction="always"
        Android:title="More">
        </item>

アイテムを取得したら、オーバーフローメニューに必要なアイテムを含むサブメニューを追加します。例:

<item
    Android:id="@+id/a_More"
    Android:icon="@drawable/more"
    Android:showAsAction="always"
    Android:title="More">
    <menu>
        <item
            Android:id="@+id/aM_Home"
            Android:icon="@drawable/home"
            Android:title="Home"/>
    </menu>
</item>

クリックすると、内部の他のアイテムが膨らみます。私のアプリケーションはActionBarSherlock 4.0を使用しているため、これが機能する前に、「SplitActionBar」にアクセスする必要があります。 (デフォルトで引き続き機能しますAndroid Actionbar)

方法は次のとおりです。AndroidManifest.xmlファイルで、オーバーフローメニューが必要なアクティビティの下にこのコードを追加する必要があります。正直なところ、アクションバーを分割しているかどうかは関係ありませんが、私はそれを好みます。

Android:uiOptions="splitActionBarWhenNarrow"

注:オーバーフローメニューを膨らませるアイテムは、showAsAction="always"

ヴオラ!オーバーフローメニューがあります。お役に立てば幸いです。 :)

12
LeviRockerSk8er

LeviRockerSk8erの提案に従って、次のようにアクションバーにオーバーフローメニューを強制的に表示しました。 

これは「menu.xml」のコードです。

<item
    Android:id="@+id/web_clasica"
    Android:icon="@drawable/ic_action_web_site"
    Android:showAsAction="ifRoom"
    Android:title="@string/menu_web"
    />
<item
    Android:id="@+id/overflow_fijo"
    Android:icon="@drawable/ic_action_core_overflow"
    Android:showAsAction="always"
    Android:title="@string/menu_email"
   >
   <menu>
    <item
    Android:id="@+id/email"
    Android:icon="@drawable/ic_action_new_email"
    Android:showAsAction="ifRoom"
    Android:title="@string/menu_email"
   />
    <item
    Android:id="@+id/share"
    Android:icon="@drawable/ic_action_share"
    Android:showAsAction="ifRoom"
    Android:title="@string/menu_share"
    />
    <item
    Android:id="@+id/about"
    Android:showAsAction="ifRoom"
     Android:icon="@drawable/ic_action_action_about"
    Android:title="@string/menu_about"/>
</menu>
6
harrakiss