2013-04-10 13 views
36

私のアプリでActionBarが正しく動作するようにしようとしています(そして、ActionBarSherlockを使用してAndroid 2.x 4.x)。showAsAction =余裕があっても「ifRoom」にアイテムが表示されない

私はandroid:showAsAction="ifRoom"がちょうど大きい、脂肪の嘘であるように感じる。 ifRoomにアクションを設定するたびに、それは部屋の多さがあっても常にオーバーフローメニューに表示されます。同じエミュレータの2つのスクリーンショットがあります。最初はすべてのオプションがalwaysに設定されたActionBarを示し、2つ目は最後の2つのオプションがifRoomに設定されたActionBarを示しています。あなたが見ることができるように、alwaysのスクリーンショットにすべてが表示されていたときにたくさんの部屋があったので、なぜ彼らは部屋があるので2番目に表示されていませんか?ここで

enter image description here

enter image description here

は私menu.xmlである:それはアクションバーに行くべき項目の最大数が指定されているため

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/add" 
     android:icon="@drawable/ic_menu_btn_add" 
     android:showAsAction="always" 
     android:title="Add"/> 
    <item 
     android:id="@+id/calculateNPV" 
     android:icon="@drawable/menu_icon_npv" 
     android:showAsAction="always" 
     android:title="NPV"/> 
    <item 
     android:id="@+id/calculateIRR" 
     android:icon="@drawable/menu_icon_irr" 
     android:showAsAction="always" 
     android:title="IRR/YR"/> 
    <item 
     android:id="@+id/send" 
     android:icon="@android:drawable/ic_menu_share" 
     android:showAsAction="always" 
     android:title="@string/share_pdf"/> 
    <item 
     android:id="@+id/graph" 
     android:icon="@drawable/ic_menu_gallery" 
     android:showAsAction="ifRoom" 
     android:title="@string/view_cashflow_diagram"/> 
    <item 
     android:id="@+id/deleteReorder" 
     android:icon="@drawable/ic_menu_clear_playlist" 
     android:showAsAction="ifRoom" 
     android:title="@string/delete_reorder_cashflows"/> 

</menu> 

答えて

11

、4.のようですもちろん、showAsAction: alwaysを設定することで強制的に表示させることはできますが、Google APIガイドに関しては

あなたのメニュー項目の4つ以上がアクション項目として を正当化することができると思われる場合は、その相対的な重要度を慎重に考慮して、アクション項目として4つ以上を設定しないでください( 小さな画面ではスペースが制限されている場合、オーバーフローメニューに を戻すための「ifRoom」値)。 ワイド画面で空き容量がある場合でも、UIを乱雑にし、 デスクトップツールバーのように表示されるアクション項目の長いストリーム を作成しないでください。そのため、アクション項目の数を最小限に抑えてください。

また、次の操作は、設定、ヘルプ、フィードバックなどの項目のうち、アクション の項目としては表示されません。オーバーフローメニューの場合は常に に保管してください。ミハル・Zからの回答を補完するために

+13

に動作しますdesign/media/action_bar_pattern_table.png –

+4

あなたが見ることができるように、それらの行動のための余地があるので、 - 部屋は大きくて、太った嘘です。 :)また、Menuボタンで利用可能なオプションが増えていることが目に見えないというのも残念です。 SOMEを表示すると、これが表示される場所であることがユーザーに通知されるため、インジケーターなしですべてを表示するのではなく、いくつかのオプションを表示することははるかに悪いことです。なぜ別の場所がありますか? –

+1

@ジェイクウォートン:そうだよ!私は前にこのようなものを見たことが分かっていましたが、どこを覚えていないのですか。今私はActionBarについてのアクションビデオのGoogleデザインの1つであったと思う...ありがとう! –

7

: Androidの設計ガイドページPatterns->アクションバーは、章の次の「アクションボタン」と言う:アクションが収まるどのように多くの

http://developer.android.com/design/patterns/actionbar.html

をメインのアクションバーに?アクションバーの容量は、次の規則によって制御されます。

  • アクションボタンをメインのアクションバーにバーの幅の50%以上を占めていないことがあります。
  • 下部のアクションバーの操作ボタンは、幅全体を使用できます。
  • 密度に依存しない画素(DP)は、メインアクションバー内に収まるアイテムの数を判断で画面幅:
    • 未満360 DP = 2つのアイコンを
    • 360から499、DP = 3つのアイコン
    • 500-599 DP = 4アイコン
    • 600 DPと大= 5つのアイコン
31

私は遅すぎるパーティーに来るのがないです願っています。

これは本当に大きな脂肪の嘘ではなく、小さな見落としです。

showAsAction属性は、あなたがそれゆえ xmlns:app="http://schemas.android.com/apk/res-auto"

を次のように上部のメニュータグに名前空間を定義し、その のようなあなたのshowAsAction属性を定義するためにそれを使用する必要があり別の名前空間に"http://schemas.android.com/apk/res-auto"

を使用して定義する必要があります

+11

私はまったく同じ問題を抱えていました。実際、私の場合、正反対でした。この問題を解決するには、android:showAsAction名前空間を使用してください。 – KurtCobain

+4

'ActionBarActivity'を使用している場合は、名前空間を使用する必要があります。 'Activity'を使ってアンドロイドを使うことができます:showAsAction – nickromano

+1

私はそれを試しました、私のために働かなかった。 Androidのドキュメントはそれをサポートしていません。 –

2

にUを、それを修正する必要がありapp:showAsAction="ifRoom"

http://developer.android.com/:SE

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

答えを説明してください。コードのみの回答は、通常、不明瞭で分かりにくいです。 – SuperBiasedMan

+0

まだ動作していません(...)メニューのみ –

3

使用app:showAsAction="always"代わりandroid:showAsAction="always"

0

利用コードの下に、これはそれは常にこのチャートを参照してください。それは常に4ではありません

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> 
    <item android:id="@+id/menu_share" android:title="Share" 
     android:orderInCategory="100" app:showAsAction="ifRoom" 
     android:actionProviderClass="android.widget.ShareActionProvider" /> 
</menu> 
関連する問題