मैं एंड्रॉइड 5 में डिफ़ॉल्ट डायलॉग बटन टेक्स्ट कलर कैसे बदल सकता हूं


160

मेरे ऐप में कई अलर्ट डायलॉग हैं। यह एक डिफ़ॉल्ट लेआउट है लेकिन मैं संवाद में सकारात्मक और नकारात्मक बटन जोड़ रहा हूं। तो बटन एंड्रॉइड 5 (हरा) का डिफ़ॉल्ट टेक्स्ट रंग प्राप्त करते हैं। मैंने इसे सफलता के बिना बदलने की कोशिश की। किसी भी विचार कैसे उस पाठ का रंग बदलने के लिए?

मेरा कस्टम संवाद:

public class MyCustomDialog extends AlertDialog.Builder {

    public MyCustomDialog(Context context,String title,String message) {
        super(context);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        View viewDialog = inflater.inflate(R.layout.dialog_simple, null, false);

        TextView titleTextView = (TextView)viewDialog.findViewById(R.id.title);
        titleTextView.setText(title);
        TextView messageTextView = (TextView)viewDialog.findViewById(R.id.message);
        messageTextView.setText(message);

        this.setCancelable(false);

        this.setView(viewDialog);

    } }

संवाद बनाना:

MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage);
builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            ...
                        }
}).show();

वह निगेटिवबटन एक डिफ़ॉल्ट डायलॉग बटन है और एंड्रॉइड 5 लॉलीपॉप से ​​डिफ़ॉल्ट हरा रंग लेता है।

बहुत धन्यवाद

हरे बटन के साथ कस्टम संवाद


लगभग डुप्लिकेट प्रश्न / उत्तर stackoverflow.com/a/29810469/2291 जो मुझे लगता है कि इन दिनों अधिक लागू है।
जॉन एडम्स

जवाबों:


191

आप AlertDialogपहले ऑब्जेक्ट बनाने की कोशिश कर सकते हैं , और फिर बटन का रंग बदलने के लिए सेट करने के लिए इसका उपयोग कर सकते हैं और फिर इसे दिखा सकते हैं। (ध्यान दें कि builderऑब्जेक्ट पर show()कॉल create()करने के बजाय हम AlertDialogऑब्जेक्ट प्राप्त करने के लिए कॉल करते हैं :

//1. create a dialog object 'dialog'
MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage); 
AlertDialog dialog = builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    ...
                }

            }).create();

//2. now setup to change color of the button
dialog.setOnShowListener( new OnShowListener() {
    @Override
    public void onShow(DialogInterface arg0) {
        dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(COLOR_I_WANT);
    }
});

dialog.show()

कारण आपको इस पर करना होगा onShow() और आप अपना संवाद बनाने के बाद बस उस बटन को प्राप्त नहीं कर सकते हैं, यह बटन अभी तक नहीं बनाया गया है।

मैं बदल गया AlertDialog.BUTTON_POSITIVEAlertDialog.BUTTON_NEGATIVE आपके प्रश्न में परिवर्तन को प्रतिबिंबित करने के लिए । हालांकि यह अजीब है कि "ओके" बटन एक नकारात्मक बटन होगा। आमतौर पर यह पॉजिटिव बटन होता है।


आपके उत्तर के लिए धन्यवाद, लेकिन मेरे पास AlertDialog में वह तरीका नहीं है। मेरी अपडेट की गई पोस्ट देखें।
FOMDeveloper

5
वह तरीका AlertDialog क्लास में है, ना कि बिल्डर क्लास में। इसलिए Builder.show () को कॉल करने के बजाय आप Builder.create () कर सकते हैं, जो AlertDialog क्लास देता है। फिर आपने AlertDialog ऑब्जेक्ट पर श्रोता और फिर कॉल शो () की स्थापना की
trungdinhtrong

3
लेकिन ऐसा करने का एक और तरीका होना चाहिए। लगता है जैसे यह विषय से एक रंग है, क्या हम इसे विषय / शैली के माध्यम से बदल सकते हैं?
मिल्स

यह पूर्ण है। Xamarin.Android में बस की कोशिश की और यह perfeclty काम करता है। आपका बहुत बहुत धन्यवाद।
पेरोजो

280

यहाँ शैलियों के साथ यह करने का एक प्राकृतिक तरीका है:

यदि आपकी AppThemeविरासत है Theme.MaterialComponents, तो:

<style name="AlertDialogTheme" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
    <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
    <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
</style>

<style name="NegativeButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
    <item name="android:textColor">#f00</item>
</style>

<style name="PositiveButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
    <item name="android:textColor">#00f</item>
</style>

अगर आपको AppThemeविरासत में मिला है Theme.AppCompat:

<style name="AlertDialogTheme" parent="ThemeOverlay.AppCompat.Dialog.Alert">
    <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
    <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
</style>

<style name="NegativeButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="android:textColor">#f00</item>
</style>

<style name="PositiveButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="android:textColor">#00f</item>
</style>

अपने AlertDialogThemeमें उपयोग करेंAppTheme

<item name="alertDialogTheme">@style/AlertDialogTheme</item>

या कंस्ट्रक्टर में

androidx.appcompat.app.AlertDialog.Builder(context, R.style.AlertDialogTheme)

34
मुझे बटन को बदलना थाबेरनेटिव बट्टन स्टाइल को एंड्रॉइड पर: बटनबेरनेटिवबटनबटन और बटनबेरोसिटिव बट्टन के सिटेल को एंड्रॉइड: बटनबेरोसिटिव बट्टन के लिए बटन। फिर इसने काम किया (एपीआई 21+)।
व्लाद

23
Android.app.v7.app.AlertDialog के बजाय android.app.lertDialog का उपयोग करना याद रखें। बुलशिट में मुझे 2 घंटे लगे
थानबिनह84

2
मुझे AlertDialogTheme के माता-पिता को "Base.Theme.AppCompat.Light.Dialog.Alert" में बदलना पड़ा। और बटन को हटा देंबैरनेटिवबटनटन और बटनबेरोसिटिवबटन बटन को हटा दें। AlertDialogTheme में <item name = "colorAccent"> @ color / dashboard_red_color </ item> भी जोड़ें। nd पूरी तरह से काम करता है।
ज़ेफियर

3
नई सामग्री लाइब्रेरी का उपयोग करते समय यह काम नहीं करता है com.google.android.material:material:1.0.0-beta01और मैं Theme.MaterialCompords.Light.Dialog.Alert का उपयोग कर रहा हूं
संजीव

2
@ एलएक्स ने सामग्री घटकों के विषय को शामिल करने के लिए अद्यतन उत्तर दिया
अलेक्जेंडर परफिलिव

120

बटन और अन्य पाठ का रंग भी विषय के माध्यम से बदला जा सकता है:

मान-21 / styles.xml

<style name="AppTheme" parent="...">
  ...
  <item name="android:timePickerDialogTheme">@style/AlertDialogCustom</item>
  <item name="android:datePickerDialogTheme">@style/AlertDialogCustom</item>
  <item name="android:alertDialogTheme">@style/AlertDialogCustom</item>
</style>

<style name="AlertDialogCustom" parent="android:Theme.Material.Light.Dialog.Alert">
  <item name="android:colorPrimary">#00397F</item>
  <item name="android:colorAccent">#0AAEEF</item>
</style>

परिणाम:

संवाद खजूर बीनने वाला


1
वर्तमान में मुझे केवल चेकबॉक्स रंग या बटन रंग बदलने का कोई तरीका नहीं पता है। लहजे का रंग उन दोनों को बदल देता है।
peceps

4
मुझे यह दृष्टिकोण पसंद आया, लेकिन मुझे लगता है कि stackoverflow.com/a/29810469/2291 पर इसका उत्तर यह करने के लिए थोड़ा साफ है।
जॉन एडम्स

12
अपने प्रोजेक्ट में काम करने के लिए मुझे इस android:हिस्से को android:alertDialogThemeऔर उससे दूर करना पड़ा android:colorAccent
प्रतिबंध-जियोइंजीनियरिंग

2
Android होने: मूल्यों पर उपसर्ग इस बात पर निर्भर करता है कि आप शैलियों को कहाँ रखते हैं। xml, मानों में या मानों में- vXX
peceps

1
AppCompat और एक साधारण मान फ़ोल्डर के साथ इस काम को करने के लिए, बस @ प्रतिबंध-जियोइंजीनियरिंग द्वारा सुझाए गए परिवर्तनों का पालन करें
फेलिक्स

94

सबसे सरल उपाय है:

dialog.show(); //Only after .show() was called
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(neededColor);
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(neededColor);

4
उन क्षेत्रों को गैर-स्थिर चर से संदर्भित नहीं किया जाना चाहिए, AlertDialog.BUTTON_NEGATIVEआदि होना चाहिए
जो मैहर

यह ऐसा करने का सबसे अच्छा और सरल तरीका था। ध्यान दें कि मैंने "बनाने" का उपयोग नहीं किया बल्कि शो () के बाद संवाद को पकड़ा। जैसे AlertDialog डायलॉग = बिल्डर।शो ();
स्टीफन मैककॉर्मिक

2
जबकि यह समाधान काम कर सकता है, तार्किक रूप से यह त्रुटिपूर्ण है। यहाँ क्या होता है आप पहले संवाद दिखाते हैं, और फिर आप इसका स्वरूप बदलते हैं। अंतर्निहित कार्यान्वयन (जो समय के साथ बदला जा सकता है) और डिवाइस के प्रदर्शन पर निर्भर करता है, आप सैद्धांतिक रूप से एक "झिलमिलाहट" देख सकते हैं जहां उपयोगकर्ता एक संवाद दिखाता है और फिर जल्दी से अपना स्वरूप बदल देता है।
ट्रूगिनडेंट्रॉन्ग

31

संवाद बटन रंग बदलने के दो तरीके हैं।

मूल मार्ग

यदि आप किसी गतिविधि में बदलाव करना चाहते हैं, तो नीचे दी गई दो पंक्तियों को लिखें alertDialog.show();

alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorPrimary));
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorPrimaryDark));

सिफारिश की

मैं के लिए एक थीम जोड़ने का सुझाव देंगे AlertDialogमें styles.xmlताकि आप प्रत्येक गतिविधि / संवाद कॉल में बार-बार एक ही कोड लिखने की जरूरत नहीं है। आप बस एक शैली बना सकते हैं और उस विषय को संवाद बॉक्स पर लागू कर सकते हैं। इसलिए जब भी आप AlertDialog बॉक्स का रंग बदलना चाहते हैं, तो बस style.xml में रंग बदलें और सभी डायलॉग बॉक्स पूरे एप्लिकेशन में अपडेट किए जाएंगे।

<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/colorPrimary</item>
</style>

और में विषय लागू करते हैं AlertDialog.Builder

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialogTheme);

यह उत्तर सही होने के दौरान सबसे साफ है।
Big_Chair

11

यदि आप बटन पाठ रंग बदलना चाहते हैं (सकारात्मक, नकारात्मक, तटस्थ) बस अपने कस्टम संवाद शैली में जोड़ें:

<item name="colorAccent">@color/accent_color</item>

तो, आपकी संवाद शैली इस तरह दिखनी चाहिए:

<style name="AlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:textColor">@android:color/black</item>
    <item name="colorAccent">@color/topeka_accent</item>
</style>

6
<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:colorPrimary">#00397F</item>
    <item name="android:textColorPrimary">#22397F</item>
    <item name="android:colorAccent">#00397F</item>
    <item name="colorPrimaryDark">#22397F</item>
</style>

Appcompat का उपयोग करके बटन और अन्य पाठ का रंग भी बदला जा सकता है:


Theme.AppCompat.Light.Dialog.Alert अच्छी तरह से बटन का रंग बदलने के लिए सफेद काम करता है।
लियो के

6
  1. अपने ऐप के विषय / शैली में, निम्न पंक्तियाँ जोड़ें:

    <item name="android:buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
    <item name="android:buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
    <item name="android:buttonBarNeutralButtonStyle">@style/NeutralButtonStyle</item>
  2. फिर निम्नलिखित शैलियों को जोड़ें:

    <style name="NegativeButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
        <item name="android:textColor">@color/red</item>
    </style>
    
    <style name="PositiveButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
        <item name="android:textColor">@color/red</item>
    </style>
    
    <style name="NeutralButtonStyle" 
    parent="Widget.MaterialComponents.Button.TextButton.Dialog">
        <item name="android:textColor">#00f</item>
    </style>

इस विधि का उपयोग करना AlertDialog बिल्डर में थीम को सेट करने के लिए अनावश्यक बनाता है।


4

बस एक नोट के रूप में:

बटन के रंग (और पूरी शैली) भी वर्तमान विषय पर निर्भर करते हैं जो आपके द्वारा उपयोग किए जाने पर अलग-अलग हो सकते हैं

android.app.AlertDialog.Builder builder = new AlertDialog.Builder()

या

android.support.v7.app.AlertDialog.Builder builder = new AlertDialog.Builder()

(दूसरे का उपयोग करने के लिए बेहतर है)


3

यहां बताया गया है कि आप इसे कैसे करते हैं: सरल तरीका

// Initializing a new alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.message);
builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        doAction();
    }
});
builder.setNegativeButton(R.string.cancel, null);

// Create the alert dialog and change Buttons colour
AlertDialog dialog = builder.create();
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
    @Override
    public void onShow(DialogInterface arg0) {
        dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.red));
        dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.blue));
        //dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(getResources().getColor(R.color.black));
    }
});
dialog.show();

1

मेरे लिए यह अलग था, मैंने एक बटन थीम का उपयोग किया

<style name="ButtonLight_pink" parent="android:Widget.Button">
      <item name="android:background">@drawable/light_pink_btn_default_holo_light</item>
      <item name="android:minHeight">48dip</item>
      <item name="android:minWidth">64dip</item>
      <item name="android:textColor">@color/tab_background_light_pink</item>
    </style>

और क्योंकि

एंड्रॉयड: textcolor

वहाँ सफेद था ... मैं किसी भी बटन पाठ नहीं देखा था (डायलॉग बटन मूल रूप से बटन भी हैं)। वहाँ हम जाते हैं, इसे बदल दिया, इसे ठीक कर दिया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.