2012-01-10 10 views
1

私はコードのコンパイルに関して同様の質問を投稿しましたが、すべてを実行することができました。しかし、私のコードは、デフォルトの白い背景を暗い色に変更しません。ここに私のコードは次のとおりです。MenuItemの背景は変更されません

<?xml version="1.0" encoding="utf-8"?> 
    <resources> 
    <style name="Theme"> 
     <item name="@android:panelFullBackground">@android:color/background_dark</item> 
     <item name="@android:panelColorBackground">@android:color/background_dark </item> 
     <item name="@android:panelBackground">@android:color/background_dark</item> 
    </style> 
    </resources> 

私はここにテーマを適用しています:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    style="@style/Theme"> 
     <item android:id="@+id/add"/>...... 
</menu> 

編集:ここでlogcat

01-10 05:47:08.434: E/AndroidRuntime(30489): FATAL EXCEPTION: main 
01-10 05:47:08.434: E/AndroidRuntime(30489): android.content.res.Resources$NotFoundException: Resource ID #0x0 
01-10 05:47:08.434: E/AndroidRuntime(30489): at android.content.res.Resources.getValue(Resources.java:901) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at android.content.res.Resources.getDrawable(Resources.java:589) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at com.android.internal.policy.impl.PhoneWindow.openPanel(PhoneWindow.java:500) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at com.android.internal.policy.impl.PhoneWindow.onKeyUpPanel(PhoneWindow.java:703) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at com.android.internal.policy.impl.PhoneWindow.onKeyUp(PhoneWindow.java:1475) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1845) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2758) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2730) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at android.view.ViewRoot.handleMessage(ViewRoot.java:1999) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at android.os.Looper.loop(Looper.java:150) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at android.app.ActivityThread.main(ActivityThread.java:4385) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at java.lang.reflect.Method.invokeNative(Native Method) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at java.lang.reflect.Method.invoke(Method.java:507) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
01-10 05:47:08.434: E/AndroidRuntime(30489): at dalvik.system.NativeStart.main(Native Method) 
+0

(。ここで私はActionBarSherlock、それ故に親テーマを使っていることに注意してください)

<style name="AppTheme" parent="Theme.Sherlock"> <item name="android:panelBackground">@drawable/menu_hardkey_panel</item> </style> 

あなたはこのポストのhttpをチェックすることができます/ /stackoverflow.com/questions/2944244/change-the-background-color-of-the-options-menu。 – nandeesh

+0

私はこれらの解決策をチェックしました。それらの多くにバグがあり、すべてのプラットフォームで動作しません。 – Jrom

+0

アイテム名の属性にアイテム名属性に「@」は必要ないことに注意してください。たとえば、アイテム名に「item name = "android:panelFullBackground">​​ @ android:color/background_dark – ubzack

答えて

3

の代わりにそのテーマを設定から出力されMenuItemに設定する場合は、ApplicationタグにAndroidManifest.xmlのこのテーマを設定してみてください:

"Theme"を定義するとき
... 
<application android:theme="@style/Theme"> 
... 

このようstyles.xmlでスタイルで親を追加します。

編集:これは私のために働いているが色を変更しようと

<resources> 
    <style name="Theme" parent="android:Theme"> 
     <item name="@android:panelFullBackground">#9C133C</item> 
     <item name="@android:panelColorBackground">#9BCD08</item> 
     <item name="@android:panelBackground">#9C133C</item> 
    </style> 
</resources> 
+0

それはうまくいかないようです。 – Jrom

+0

私の編集された答えを見てください.. !! –

+0

コードを実行すると、アプリケーションがクラッシュします。明確にするために、私はメニューが定義されているxmlファイルからstyle = "@ style/Theme"を削除し、マニフェストファイルの代わりにアプリケーションタグに入れました。 **編集**私のプロジェクトビルドターゲットは2.2 – Jrom

0

活動にこれを追加次のメニューの外観を変更する:

protected final Factory menuFactory = new LayoutInflater.Factory() { 
     @Override 
     public View onCreateView(String name, final Context context, AttributeSet attrs) { 
      if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) { 
       try { 
        LayoutInflater f = LayoutInflater.from(context); 
        final View view = f.createView(name, null, attrs); 
        new Handler().post(new Runnable() { 
         @Override 
         public void run() { 
          view.setBackgroundResource(android.R.color.background_dark); 
          // You could also change the text color like this: 
          ((TextView) view).setTextAppearance(context, android.R.style.TextAppearance_Medium); 
         } 
        }); 
        return view; 
       } catch (Exception e) { 
       } 
      } 
      return null; 
     } 
    }; 

@Override 
protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     getLayoutInflater().setFactory(menuFactory); 
    } 
2

android:panelBackgroundは色ではなく描画可能である必要があります。

開始するには、SDKのプラットフォームリソース(menu_hardkey_panel_holo_dark.9.png)でAndroidのデフォルトの9パッチを探し出し、独自の描画可能フォルダにコピーして編集するのがよいでしょう。最後に、アディルとしてスタイル宣言に項目を追加し、指摘したように:

関連する問題