سؤال

هذا السؤال لديه بالفعل إجابة هنا:

أحاول تغيير اللون الرمادي الفاتح القياسي إلى أخضر فاتح. يبدو أنه لا توجد طريقة بسيطة للقيام بذلك (من خلال موضوعات Android ، على سبيل المثال) لكنني وجدت حلًا كما هو موضح في هذه الصفحة: http://tinyurl.com/342dgn3.

يبدو أن المؤلف قد اختفى ، هل يمكن لأحد أن يساعدني في دمج هذا الرمز؟ لا أفهم أين أحتاج إلى تنفيذ LayoutInflater فئة المصنع.

هل كانت مفيدة؟

المحلول

عندما تقوم بتضخيم القائمة ، استدعاء طريقة setMenubackground ()

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.menu,menu);
    setMenuBackground(); 
    return true;    
}

واكتب هذا بطريقة setMenubackground ()

    protected void setMenuBackground(){                     
        // Log.d(TAG, "Enterting setMenuBackGround");  
        getLayoutInflater().setFactory( new Factory() {  
            public View onCreateView(String name, Context context, AttributeSet attrs) {
                if ( name.equalsIgnoreCase( "com.android.internal.view.menu.IconMenuItemView" ) ) {
                    try { // Ask our inflater to create the view  
                        LayoutInflater f = getLayoutInflater();  
                        final View view = f.createView( name, null, attrs );  
                        /* The background gets refreshed each time a new item is added the options menu.  
                        * So each time Android applies the default background we need to set our own  
                        * background. This is done using a thread giving the background change as runnable 
                        * object */
                        new Handler().post( new Runnable() {  
                            public void run () {  
                                // sets the background color   
                                view.setBackgroundResource( R.color.androidcolor);
                                // sets the text color              
                                ((TextView) view).setTextColor(Color.BLACK);
                                // sets the text size              
                                ((TextView) view).setTextSize(18);
                }
                        } );  
                    return view;
                }
            catch ( InflateException e ) {}
            catch ( ClassNotFoundException e ) {}  
        } 
        return null;
    }}); 
}

نصائح أخرى

من الواضح أن هذه مشكلة يواجهها الكثير من المبرمجين والتي لم تقدم Google بعد حلًا مرضيًا ومدعومًا.

يعد اختراق SetMenubackground () الذي نشره Abhay Kumar و Nik Reiman بداية جيدة ولكنه إما تعطل أو لا يعمل على Android 2.3.

يرجى الاطلاع على إجابتي (Louis Semprini) في سؤال Stackoverflow هذا للاختراق الذي تم تعليقه بشكل أفضل وأكثر دقة يعمل على 2.1 و 2.2 و 2.3 (ولا ينبغي أن يلحق أي ضرر على 3.x ، على الرغم من أننا لا نستطيع أبدًا ضمان ذلك):

كيفية تغيير لون الخلفية لقائمة الخيارات؟

أيضًا ، إليك العديد من الموارد الأخرى التي قد تجدها مفيدة لهذا السؤال:

تغيير لون الخلفية من قائمة Android

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

http://www.macadamian.com/blog/post/android_-_theming_the_unthemable/

زر تبديل Android Menuitem

هل من الممكن جعل خلفية قائمة خيارات Android غير ترجمة؟

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

تعيين خلفية القائمة لتكون غير شفافة

استخدام setMenubackground في oncreate.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top