2011-09-01 34 views
18

मेरे पास एक मुख्य गतिविधि है जहां उपयोगकर्ता पृष्ठभूमि रंग को अपने पसंदीदा रंग में बदल सकते हैं। मेरी समस्या यह है कि मैं किसी भी कस्टम संवाद के पृष्ठभूमि रंग को नहीं बदल सकता।प्रोग्राम पृष्ठभूमि के रूप में संवाद पृष्ठभूमि रंग कैसे बदलें?

ढेर अतिप्रवाह में अन्य उत्तर सुझाव देते हैं:

(क) पसंदीदा रंग के overiding the default theme। मुझे नहीं लगता कि इस मामले में एक उपयुक्त समाधान है क्योंकि मुझे पता है कि रन टाइम पर थीम बदलना अनुशंसित नहीं है।

(ख) Changing in styles.xml (इस मामले में उपयुक्त नहीं मैं रन टाइम पर नहीं बदल सकते हैं के रूप में)

(ग) Overriding the AlertBuilder class (लेकिन इस पूरे चेतावनी संवाद टिंट करता)

यह निकटतम मैं आ गए हैं रंग बदलने के लिए अलर्ट बिल्डर शीर्षक को हटा रहा है, और पसंदीदा दृश्य की पृष्ठभूमि को पसंदीदा रंग (eg.pink) में सेट करना है। दुर्भाग्यवश यह संवाद के ऊपर और नीचे एक बदसूरत पट्टी देता है।

कोड छवि के बाद कोड शामिल है, संवाद पृष्ठभूमि को बदलने के तरीके के बारे में सुझावों की बहुत सराहना की जाएगी।

Dialog appearance

कस्टम संवाद विचारों पृष्ठभूमि रंग बदलने के लिए डिफ़ॉल्ट उपस्थिति

protected Dialog onCreateDialog(int dialogId) { 
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final AlertDialog.Builder builder = new AlertDialog.Builder(this); 


     final View viewMessEdit = inflater.inflate(R.layout.example,(ViewGroup) findViewById(R.id.dialog_mess_edit_root)); 
       builder.setView(viewMessEdit); 
     builder.setTitle("Alert builder's title"); 
} 

कोड के लिए कोड (और चेतावनी बिल्डर के शीर्षक निकाल दिया जाता है)

protected Dialog onCreateDialog(int dialogId) { 
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final AlertDialog.Builder builder = new AlertDialog.Builder(this); 


     final View viewMessEdit = inflater.inflate(R.layout.example,(ViewGroup) findViewById(R.id.dialog_mess_edit_root)); 
       builder.setView(viewMessEdit); 
       viewMessEdit.setBackgroundResource(R.color.pink_dark); 

} 
+0

क्या आप इस तस्वीर को अपनी तस्वीर के रूप में पूरा कर सकते हैं? यदि हां, तो क्या आप साझा कर सकते हैं? – pengwang

उत्तर

8

मुझे थोड़ी सी समस्या का सामना करना पड़ा। और इसे हल करने का एकमात्र तरीका लेआउट का अपना संस्करण बढ़ा रहा था। मैं देखता हूं कि आपके मामले में यह एक अलर्टडिअलॉग है। मैं आपको क्या करने की सलाह देता हूं, एक अद्वितीय वर्ग बनाना है, यह आपका अनुकूलित अलर्टडिअलॉग है और इसके लिए एक लेआउट बनाएं, और फिर आप इसे फुलाएं।

यहां एक पोस्ट है जिसने मुझे बहुत मदद की। http://blog.androgames.net/10/custom-android-dialog/

मैंने इस पोस्ट का पालन किया और संवाद को अनुकूलित करने के साथ अपनी समस्या हल की।

कृपया, यदि आपको अधिक संदेह हैं, तो मुझे बताएं।

धन्यवाद।

+1

एंड्रॉम्स पोस्ट के उस लिंक के लिए धन्यवाद। यह स्पष्ट रूप से लिखा गया था और अच्छी तरह से टिप्पणी की थी। यहां ब्लॉग पोस्ट संबंधित है। http://dtmilano.blogspot.com/2010/01/android-ui-colored-dialogs.html – Mel

+15

@rogcg लिंक काम नहीं कर रहा है। – Deepak

+0

मैंने वेबैक मशीन का उपयोग कर एक कैश किए गए संस्करण में लिंक अपडेट किया है। – kabuko

17

मुझे एक नियम समाधान मिला!

d.getWindow().setBackgroundDrawableResource(R.drawable.menubackground); 

यह मेरे लिए एक सामान्य संवाद के साथ काम करता है। लेकिन मुझे नहीं पता कि यह AlertDialog पर काम करता है या नहीं।

+2

मैंने अभी कोशिश की, यह नहीं है। मैंने एक ठोस रंग के साथ प्रयास किया और पृष्ठभूमि में अलर्टडियलॉग की छाया के बजाय मेरा रंग दिखाई दिया। – soger

+0

@ user3696814 वैसे यह AlertDialog में काम करता है। – CopsOnRoad

3

मुझे कस्टम लेआउट बनाने के बिना एक हैक मिला है, आप AlertDialog के कुछ गुणों के साथ खेलकर कई डिज़ाइन बना सकते हैं।

आप क्या करना है:

जब AlertDialog अपनी स्क्रीन पर दिखाई देता है, OnShowListener कहा जाता है। तो, dialog.setOnShowListener(this) जोड़कर आप अपने AlertDialog को कस्टमाइज़ करने में सक्षम होंगे।

कोड:

// Create AlertDialog 
AlertDialog.Builder adb = new AlertDialog.Builder(context1); 
    adb.setTitle(context1.getString(R.string.app_name)) 
    .setMessage(message) 
    .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 

     } 
}); 
AlertDialog dialog = adb.create(); 

// Make some UI changes for AlertDialog 
dialog.setOnShowListener(new DialogInterface.OnShowListener() { 
    @Override 
    public void onShow(final DialogInterface dialog) { 

     // Add or create your own background drawable for AlertDialog window 
     Window view = ((AlertDialog)dialog).getWindow(); 
     view.setBackgroundDrawableResource(R.drawable.your_drawable); 

     // Customize POSITIVE, NEGATIVE and NEUTRAL buttons. 
     Button positiveButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE); 
     positiveButton.setTextColor(context1.getResources().getColor(R.color.primaryColor)); 
     positiveButton.setTypeface(Typeface.DEFAULT_BOLD); 
     positiveButton.invalidate(); 

     Button negativeButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEGATIVE); 
     negativeButton.setTextColor(context1.getResources().getColor(R.color.primaryColor)); 
     negativeButton.setTypeface(Typeface.DEFAULT_BOLD); 
     negativeButton.invalidate(); 

     Button neutralButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEUTRAL); 
     neutralButton.setTextColor(context1.getResources().getColor(R.color.primaryColor)); 
     neutralButton.setTypeface(Typeface.DEFAULT_BOLD); 
     neutralButton.invalidate(); 
    } 
}); 
+0

एक आकर्षण की तरह) thx –

1

सुझाव दिया समाधान

d.getWindow().setBackgroundDrawableResource(R.drawable.menubackground); 

अच्छी तरह से काम न करें (6.0 में परीक्षण) के रूप में यह संवाद छाया में परिवर्तन

यहाँ मेरी है समाधान:

public static void changeDialogBackground(final Dialog dialog,final int resId) { 
    dialog.getWindow().getDecorView().setBackgroundResource(resId); 
    dialog.setOnShowListener(new DialogInterface.OnShowListener() { 
     @Override 
     public void onShow(final DialogInterface dialog) { 
      Window window = ((AlertDialog)dialog).getWindow(); 
      window.getDecorView().setBackgroundResource(resId); 
     } 
    }); 
} 
3

वार्ता पृष्ठभूमि रंग

dialog.getWindow().setBackgroundDrawableResource(R.color.glassblack); 

वास्तव में मेरे लिए ठीक काम किया।

संबंधित मुद्दे