7

こんにちは
、ハニカム Android 3.0 を使用して Android アプリケーションを開発しています。Action Bar にメニューを表示しようとしています。メニューにはアイコンとタイトルがあります。メニュー項目をクリックすると、項目がドロップダウン リストの形式で表示されます。メニューをクリックすると表示されるドロップダウンリストのタイトル横にアイコンを表示したい。誰かがこの問題を整理するのを手伝ってくれますか? 私のxmlファイルは以下の通りです:

 <?xml version="1.0" encoding="utf-8"?>           
<menu  xmlns:android="http://schemas.android.com/apk/res/android">  
<item          
  android:id="@+id/addserver"  
  android:icon="@android:drawable/ic_menu_add"   
  android:title="Add Server"    
  android:showAsAction="ifRoom|withText"     
>  

<menu>    
            <item android:id="@+id/fileserver"    
                  android:icon="@android:drawable/ic_menu_add"  
                  android:title="File Server"          
                  android:onClick="onCreate"           
                  android:showAsAction="always"/>      
            <item android:id="@+id/sharepoint"            
                  android:icon="@android:drawable/ic_menu_add"  
                  android:title="Share Point"          
                  android:onClick="onCreate" />          
        </menu>            
</item>

最初は、左側にアイコンが付いたサーバーの追加が表示されます。それをクリックすると、ファイルサーバー、共有ポイントがアイコンなしのドロップダウンリストとして表示されますが、android:icon ステートメントを指定しました。
この問題を解決するのを手伝ってくれる人はいますか?
前もって感謝します、

4

3 に答える 3

10

アクション バーのオーバーフロー メニューにアイコンが表示されない動作は、仕様によるものです (この記事の執筆時点)。絶対にアイコンを使用する必要がある場合は、UI 規則に合わせてデザインを再考することを検討して、カスタム実装を作成する必要があります。

于 2011-03-07T06:39:59.193 に答える
1

元の質問は少し古く、さらに、メニューにアイコンを表示することに対する理由付けには実体がやや欠けているため (Steven Elliott の優れたコメントDisplaying icon for menu items of Action Bar in Honeycomb android 3.0を参照)、私は指摘したいと思いますここで提供された優れた実用的なソリューション:

@Override
public boolean onMenuOpened(int featureId, Menu menu) {
    if(featureId == Window.FEATURE_ACTION_BAR && menu != null) {
        if(menu.getClass().getSimpleName().equals("MenuBuilder")) {
            try {
                Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
                m.setAccessible(true);
                m.invoke(menu, true);
            } catch(NoSuchMethodException e) { //...
            } catch(Exception e) { // ...
            }
        }
    }
    return super.onMenuOpened(featureId, menu);
}

このコードをアクティビティに追加して、適切なモジュールをインポートするだけです。繰り返しますが、私の仕事ではありませんが、それでもなお働いています。

于 2014-09-16T10:38:58.237 に答える