AppCompat 22.1 और ऊपर से नए AlertDialog का उपयोग और शैली कैसे करें


154

मैं डिफ़ॉल्ट Android AlertDialogसे appCompat-22.1 में शामिल नए में माइग्रेट करने का प्रयास कर रहा हूं। अब तक मैं समझता हूं कि android.support.v7.app.AlertDialogइसका उपयोग करने के लिए आपको केवल पैकेज आयात करना होगा।

लेकिन मैं इसे कैसे स्टाइल कर सकता हूं? उदाहरण के लिए सकारात्मक / नकारात्मक बटन रंग, शीर्षक रंग, संदेश रंग और पृष्ठभूमि रंग बदलें?

जवाबों:


448

बनाते समय AlertDialogआप उपयोग करने के लिए एक थीम सेट कर सकते हैं।

उदाहरण - संवाद का निर्माण

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
builder.setTitle("AppCompatDialog");
builder.setMessage("Lorem ipsum dolor...");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();

style.xml - कस्टम शैली

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">#4CAF50</item>
</style>

परिणाम

स्टाइल अल्ट्रोडियलॉग

संपादित करें

शीर्षक के रूप को बदलने के लिए, आप निम्न कार्य कर सकते हैं। पहले एक नई शैली जोड़ें:

<style name="MyTitleTextStyle">
    <item name="android:textColor">#FFEB3B</item>
    <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>

बाद में बस इस शैली को अपने में देखें MyAlertDialogStyle:

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    ...
    <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item>
</style>

इस तरह आप textColorसंदेश के माध्यम से android:textColorPrimaryएक अलग और शैली के माध्यम से शीर्षक के लिए एक अलग परिभाषित कर सकते हैं ।


2
धन्यवाद @reVerse एक और बात। कई पुस्तकालय अलग-अलग शीर्षक और पाठ रंग रखने की अनुमति देते हैं। क्या आप जानते हैं कि यह यहाँ भी संभव है?
थैनोसफिशरमैन

3
अरे फिर से! क्या संदेश का पाठ आकार बदलने का कोई तरीका है?
ThanosFisherman

1
@ThanosF दुर्भाग्य से मुझे ऐसा करने वाले किसी भी xml विशेषता के बारे में पता नहीं है। लेकिन यह जावा-कोड के माध्यम से निश्चित रूप से संभव है।
17:13 पर

2
@ ससमर जप। वह मूल रूप से की विचार है appcompat-v7- यह API स्तर 7 (एंड्रॉयड 2.1) के लिए नीचे नए घटकों के पश्च संगतता लाता है
रिवर्स

1
21+ पर बटन टेक्स्ट का रंग काम करने के लिए, मेरे पास एक एंड्रॉइड होना चाहिए: बटन आइटम "MyAlertDialogStyle" और कस्टम बटन शैली में एक एंड्रॉइड: टेक्स्ट कलर आइटम।
टिम ऑटिन

61

सभी एप्लिकेशन के लिए एक थीम का उपयोग करें, और अपने डायलॉग को स्टाइल करने के लिए दूसरे पैरामीटर का उपयोग न करें

<style name="MyTheme" parent="Base.Theme.AppCompat.Light">
    <item name="alertDialogTheme">@style/dialog</item>
    <item name="colorAccent">@color/accent</item>
</style>

<style name="dialog" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/accent</item>
</style>

थीम में कलर एक्सेंट का उपयोग करने वाले मेरे ऐप पर थीम कलर के साथ अलर्टडायलॉग के बटन न दिखाएं। मुझे थीम में डायलॉग स्टाइल जोड़ना होगा।


एपीआई 10 (एंड्रॉइड 2.3) पर काम नहीं करता है, शायद केवल एपीआई 11+ पर।
ओलिव

2
शायद एपीआई 15+ पर। मैं केवल एपीआई 15+ पर नई परियोजना शुरू करता हूं, मुझे लगता है कि 4 से पहले एंड्रॉइड 2015 में अप्रचलित है।
neoteknic

@Oliv यह निर्भरता com.android.support:design:23.2.1 का उपयोग करके एपीआई 10 पर काम करता है
राहगीर

IDEA का कहना है कि API 21+ को आधार पर colorAccent का उपयोग करने की आवश्यकता है ।heme.AppCompat.Light.Dialog.Alert 'com.android.support:design:22.2.1' का उपयोग करते हुए
फेलिप एंड्रेड

@ फेलिप एंड्रेड एलवे अंतिम एसडीके संस्करण को लक्षित करता है, इसे काम करना चाहिए! मेरे पास मिनी एपीआई 15 के साथ एक प्रोजेट है और 25 डिजाइन का लक्ष्य है: 22.x अप्रचलित है, 25.1.x और अधिक का उपयोग करें
नीटकेनिक

19

यदि आप नए android.support.v7.app.AlertDialog का उपयोग करना चाहते हैं और बटनों के लिए अलग-अलग रंग हैं और एक कस्टम लेआउट भी है, तो मेरी https://gist.github.com/JoachimR/6bbbc175d5c8116d411ee पर एक नज़र डालें

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.custom_layout, null);

    initDialogUi(v);

    final AlertDialog d = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle)
            .setTitle(getString(R.string.some_dialog_title))
            .setCancelable(true)
            .setPositiveButton(activity.getString(R.string.some_dialog_title_btn_positive),
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            doSomething();
                            dismiss();
                        }
                    })
            .setNegativeButton(activity.getString(R.string.some_dialog_title_btn_negative),
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dismiss();
                        }
                    })
            .setView(v)
            .create();

    // change color of positive button         
    d.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
            b.setTextColor(getResources().getColor(R.color.colorPrimary));
        }
    });

    return d;
}

यहां छवि विवरण दर्ज करें


एक दम बढ़िया! धन्यवाद
थानोसफिशमैन

धन्यवाद, यह मेरे लिए काम करने का एकमात्र तरीका है, लेकिन क्या आप मुझे बता सकते हैं कि मैं चेकबॉक्स के लिए रंग कैसे प्राप्त कर सकता हूं? मेरे ऐप में, के माध्यम से बनाई गई रेडियो बटन की सूची के साथ एक संवाद है Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener)। मैं एडेप्टर को उप-वर्ग में जाने और वहां के दृश्य को देखने के लिए नहीं जाना चाहता।
गेबर

भारी तोपखाने जो हमेशा काम करता है! मुझे इसका उपयोग 2 विद्रोही बटनों की देखभाल के लिए करना पड़ा जो हमेशा उच्चारण के रंग में बदलने से इनकार करते थे!
rupps

7

@ उत्तर का पालन करें लेकिन मेरे मामले में, मेरे पास पहले से ही मेरी AppThemeतरह कुछ संपत्ति थी

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="android:textColor">#111</item>
    <item name="android:textSize">13sp</item>
</style>

तो मेरा संवाद कैसा लगेगा
यहां छवि विवरण दर्ज करें

मैंने इसे हल किया

1) बदलें से आयात android.app.AlertDialogकरने के लिए android.support.v7.app.AlertDialog
2) मैं में 2 संपत्ति को ओवरराइड AppThemeशून्य मान के साथ

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">#4CAF50</item>


    <item name="android:textColor">@null</item>
    <item name="android:textSize">@null</item>
</style>

AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);

आशा है कि यह दूसरे लोगों की मदद करेगा

यहां छवि विवरण दर्ज करें


आह आपका धन्यवाद! मैं समर्थन AlertDialog का उपयोग नहीं कर रहा था।
मास्टरवॉक

1

यदि आप मेरे जैसे हैं तो आप बस AppCompat में कुछ रंगों को संशोधित करना चाहते हैं, और संवाद में विशिष्ट रूप से परिवर्तन के लिए एकमात्र रंग जिसकी आपको पृष्ठभूमि है। तो फिर तुम सब करने की जरूरत है के लिए एक रंग सेट है colorBackgroundFloating

यहाँ मेरा मूल विषय है जो बिना किसी नेस्टेड थीम के बस कुछ रंगों को संशोधित करता है:

    <style name="AppTheme" parent="Theme.AppCompat">
        <item name="colorPrimary">@color/theme_colorPrimary</item>
        <item name="colorPrimaryDark">@color/theme_colorPrimaryDark</item>
        <item name="colorAccent">@color/theme_colorAccent</item>
        <item name="colorControlActivated">@color/theme_colorControlActivated</item>
        <item name="android:windowBackground">@color/theme_bg</item>
        <item name="colorBackgroundFloating">@color/theme_dialog_bg</item><!-- Dialog background color -->
        <item name="colorButtonNormal">@color/theme_colorPrimary</item>
        <item name="colorControlHighlight">@color/theme_colorAccent</item>
    </style>

-3
    <item name="editTextColor">@color/white</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textColorHint">@color/gray</item>
    <item name="android:textColorPrimary">@color/gray</item>
    <item name="colorControlNormal">@color/gray</item>
    <item name="colorControlActivated">@color/white</item>
    <item name="colorControlHighlight">#30FFFFFF</item>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.