Android: تخصيص قائمة التطبيق (على سبيل المثال لون الخلفية)

StackOverflow https://stackoverflow.com/questions/1593529

سؤال

ما هي الطريقة (إذا كانت هناك طريقة) لتخصيص القائمة (تلك التي يتم تشغيلها بواسطة زر القائمة في الهاتف). أنا مهتم بشكل خاص بأمرين:

  • تغيير لون الخلفية من الرمادي الفاتح القياسي إلى رمادي أغمق
  • كيف يتم محاذاة عناصر القائمة. لدي 4 عناصر ويتم محاذاة 2x2 تلقائيًا ، لكنني أفضل أن أحصل عليها جميعًا في سطر واحد (1 × 4)
هل كانت مفيدة؟

المحلول

ليس مع إطار القائمة المدمجة.

اهلا وسهلا بكم في اعتراض زر القائمة (عبر onKeyDown() أو شيء ما) وجعل ما تريده ، لكن ضع في اعتبارك أن المستخدمين سيتوقعون أن يبدووا كما يفعل بقية القوائم على أجهزتهم.

نصائح أخرى

لقد أنشأت فئة القائمة الخاصة بي. ربما ليس بالضبط ما تريده ولكن نأمل أن تبدأ. فيما يلي المقالة التي نشرتها ورابط قابل للتنزيل إلى رمز المصدر.

http://www.codeproject.com/kb/android/androidmenusmy.aspx

يمكنك أيضًا تنفيذ طريقة "onCreateOptionSmenu" ، والتي يتم استخدامها عادة لعرض القائمة القياسية ، وعرض ما تريد في هذه الحالة.

في لعبتي ، قمت بتطبيقها لعرض مربع حوار "متوقف مؤقتًا" عند الضغط على زر القائمة ...

استخدام الأنماط. هذا يعمل بالنسبة لي على Android 5.0

<style name="AppTheme" parent="android:Theme.Material.Light">
    <item name="android:colorPrimary">@color/primary</item>
    <item name="android:actionOverflowMenuStyle">@style/PopupMenu.MyStyle</item>
</style>

<style name="PopupMenu.MyStyle" parent="android:Widget.PopupMenu">
    <item name="android:popupBackground">@drawable/actionbar_item_background</item>
</style>

... ثم القابلة للرسمية محدد منتظم

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/primary"/>
    <item android:drawable="@color/highlighted" android:state_pressed="true"/>
</selector>

لون قائمة الخلفية في النمط. xml في موضوعك

<item name="android:panelFullBackground">@android:color/darker_gray</item>

هذا الجواب يعمل ولكن تحطمت بالنسبة لي عند استخدام Actionbarsherlock. إليك حل بديل لجعل هذا العمل مع ذلك.

    // Black Vodoo! Do not try this at home.

    final LayoutInflater li = getLayoutInflater();

    final Class<LayoutInflater> clazz = LayoutInflater.class;

    try {
        final Field fieldSet = clazz.getDeclaredField("mFactorySet");
        fieldSet.setAccessible(true);
        fieldSet.setBoolean(li, false);

        li.setFactory(new Factory() {

            @Override
            public View onCreateView(final String name,
                    final Context context, final AttributeSet attrs) {
                if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) {
                    try {
                        final LayoutInflater f = getLayoutInflater();
                        final View view = f.createView(name, null, attrs);
                        new Handler().post(new Runnable() {
                            @Override
                            public void run() {
                                // Set the text color
                                ((TextView) view).setTextColor(Color.WHITE);
                            }
                        });
                        return view;
                    } catch (final Exception e) {
                    }
                }
                return null;
            }
        });
    } catch (final Exception e) {
        e.printStackTrace();
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top