Фон MenuItem не изменится - PullRequest
       2

Фон MenuItem не изменится

1 голос
/ 10 января 2012

Я опубликовал аналогичный вопрос, касающийся компиляции моего кода, но мне удалось все запустить. Однако мой код не меняет белый фон по умолчанию на более темный цвет. Вот мой код:

<?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)

Ответы [ 3 ]

3 голосов
/ 10 января 2012

Вместо установки этой темы на MenuItem, попробуйте установить эту тему на свой тег Application в AndroidManifest.xml следующим образом:

...
<application android:theme="@style/Theme">
...

Добавить родителя в стиле при определении "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>
2 голосов
/ 24 сентября 2012

Похоже, что android:panelBackground должен быть рисунком, а не цветом.

Хорошим местом для начала, вероятно, будет поиск девяти патчей Android по умолчанию в ресурсах платформы SDK (menu_hardkey_panel_holo_dark.9.png), копирование их в собственные папки для рисования и их редактирование. Наконец, как указал Адиль, добавьте элементы в объявление стиля как:

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

(Обратите внимание, что здесь я использую ActionBarSherlock, следовательно, родительскую тему.)

0 голосов
/ 07 июля 2012

Добавьте это к занятию, для которого вы хотите изменить внешний вид меню:

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);
    }
...