मैटेरियल डिज़ाइन, स्टाइलिंग अलर्ट डायलॉग नहीं


161

मैंने अपने ऐप में appCompat सामग्री डिज़ाइन को जोड़ा है और ऐसा लगता है कि चेतावनी संवाद मेरे प्राथमिक, प्राथमिक कार्ड या accr रंगों का उपयोग नहीं कर रहे हैं।

यहाँ मेरी आधार शैली है:

<style name="MaterialNavyTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/apptheme_color</item>
    <item name="colorPrimaryDark">@color/apptheme_color_dark</item>
    <item name="colorAccent">@color/apptheme_color</item>
    <item name="android:textColorPrimary">@color/action_bar_gray</item>
</style>

मेरी समझ के आधार पर संवाद बटन पाठ को भी इन रंगों का उपयोग करना चाहिए। क्या मैं अपनी समझ पर गलत हूं या मुझे कुछ और करने की जरूरत है?


उपाय:

चिह्नित जवाब मुझे सही रास्ते पर मिला।

<style name="MaterialNavyTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/apptheme_color</item>
    <item name="colorPrimaryDark">@color/apptheme_color_dark</item>
    <item name="colorAccent">@color/apptheme_color</item>
    <item name="android:actionModeBackground">@color/apptheme_color_dark</item>
    <item name="android:textColorPrimary">@color/action_bar_gray</item>
    <item name="sdlDialogStyle">@style/DialogStyleLight</item>
    <item name="android:seekBarStyle">@style/SeekBarNavyTheme</item>
</style>

<style name="StyledDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorPrimary">@color/apptheme_color</item>
    <item name="colorPrimaryDark">@color/apptheme_color_dark</item>
    <item name="colorAccent">@color/apptheme_color</item>
</style>

आप इस लाइब्रेरी को आज़मा सकते हैं, जिसे मैंने बनाया है: github.com/AndroidDeveloperLB/MaterialStuffLibrary
Android डेवलपर

15
क्या नीचे वाला हिस्सा हल होना चाहिए? यदि हां, तो इसे स्व-उत्तर के रूप में पोस्ट करें, प्रश्न में उत्तर को संपादित न करें।
आदि इनबार

जवाबों:


463

Android लाइब्रेरी के लिए सामग्री घटकों के साथ अगस्त 2019 पर अद्यतन:

एंड्रॉइड लाइब्रेरी के लिए नए सामग्री घटकों के साथ आप नए com.google.android.material.dialog.MaterialAlertDialogBuilderवर्ग का उपयोग कर सकते हैं , जो मौजूदा androidx.appcompat.AlertDialog.Builderवर्ग से विस्तारित होता है और नवीनतम सामग्री डिज़ाइन विनिर्देशों के लिए समर्थन प्रदान करता है।

बस कुछ इस तरह का उपयोग करें:

new MaterialAlertDialogBuilder(context)
            .setTitle("Dialog")
            .setMessage("Lorem ipsum dolor ....")
            .setPositiveButton("Ok", /* listener = */ null)
            .setNegativeButton("Cancel", /* listener = */ null)
            .show();

आप ThemeOverlay.MaterialComponents.MaterialAlertDialogशैली का विस्तार करने वाले रंगों को अनुकूलित कर सकते हैं:

  <style name="CustomMaterialDialog" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
     <!-- Background Color-->
     <item name="android:background">#006db3</item>
     <!-- Text Color for title and message -->
     <item name="colorOnSurface">@color/secondaryColor</item>
     <!-- Text Color for buttons -->
     <item name="colorPrimary">@color/white</item> 
     ....
  </style>  

अपनी कस्टम शैली लागू करने के लिए बस कंस्ट्रक्टर का उपयोग करें:

new MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog)

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

बटन को कस्टमाइज़ करने के लिए , शीर्षक और बॉडी टेक्स्ट इस पोस्ट को अधिक विवरण के लिए जांचते हैं।

आप अपने ऐप थीम में विश्व स्तर पर शैली भी बदल सकते हैं :

 <!-- Base application theme. -->
 <style name="AppTheme" parent="Theme.MaterialComponents.Light">
    ...
    <item name="materialAlertDialogTheme">@style/CustomMaterialDialog</item>
 </style>

समर्थन लिब्ररी और APPCOMPAT थीम के साथ:

नए के साथ AppCompat v22.1आप नए android.support.v7.app.AlertDialog का उपयोग कर सकते हैं ।

बस इस तरह एक कोड का उपयोग करें:

import android.support.v7.app.AlertDialog

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

और इस तरह की एक शैली का उपयोग करें:

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorAccent">#FFCC00</item>
        <item name="android:textColorPrimary">#FFFFFF</item>
        <item name="android:background">#5fa3d0</item>
    </style>

अन्यथा आप अपने वर्तमान विषय में परिभाषित कर सकते हैं:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- your style -->
    <item name="alertDialogTheme">@style/AppCompatAlertDialogStyle</item>
</style>

और फिर अपने कोड में:

 import android.support.v7.app.AlertDialog

    AlertDialog.Builder builder =
           new AlertDialog.Builder(this);

यहाँ किटकैट पर एलर्टडायलॉग: यहां छवि विवरण दर्ज करें


2
क्यों डिफ़ॉल्ट अद्यतन करने के बजाय सटीक विषय का उपयोग करने के लिए AlertDialog.Builder को मजबूर करने के लिए? मैं Java कोड के बजाय इस समस्या को style.xml में हल करना पसंद करूंगा।
टॉम हुबलेक

2
प्री-लॉलीपॉप डिवाइस पर शीर्षक और बटन फोंट बोल्ड नहीं हैं।
जिम्मी ०२५१

9
मुझे इसे पाने के लिए "android:" के साथ काम करना था:<item name="android:alertDialogTheme">@style/AppCompatAlertDialogStyle</item>

1
शानदार जवाब के लिए +1 लेकिन मैं Lollypop के नीचे Android संस्करण के लिए समान UI कैसे प्राप्त कर सकता हूं ... क्योंकि नीचे दिए गए डिवाइस में UI इतना अजीब लगता है।
realpranav

1
add import android.support.v7.app.AlertDialog वर्क्स
FlipNovid

9

डायलॉग बिल्डर को इनिशियलाइज़ करते समय, थीम के रूप में दूसरा पैरामीटर पास करें। यह स्वचालित रूप से एपीआई स्तर 21 के साथ सामग्री डिजाइन दिखाएगा।

AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK);

या,

AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);

4

AppCompat संवादों के लिए ऐसा नहीं करता (अभी तक कम से कम नहीं)

संपादित करें: यह अब करता है। उपयोग सुनिश्चित करेंandroid.support.v7.app.AlertDialog


लगता है कि आप AppCompat
मैथ्यू

डिफ़ॉल्ट रूप से मेरे Android स्टूडियो ने मुझे import app.AlertDialogappCompat नहीं दिया । मैंने यह पता लगाने की कोशिश की कि वास्तव में इसकी जाँच करने से पहले लगभग 40 मिनट तक क्या गलत है ... धिक्कार है आप गूगल पर!
ग्लॉरिफाइंड

2

आप इस परियोजना पर विचार कर सकते हैं: https://github.com/fengdai/AlertDialogPro

यह आपको लॉलीपॉप के समान ही विषय वस्तु चेतावनी संवाद प्रदान कर सकता है। Android 2.1 के साथ संगत।


बस एक नोट: यह उत्तर पुराना है, फिर स्वीकार किया गया।
rekire

2

आप उपयोग कर सकते हैं

सामग्री डिजाइन पुस्तकालय

मटेरियल डिज़ाइन लाइब्रेरी , स्नैच बार जैसे बहुत ही सतर्क संवाद , बटन और अन्य चीजों के लिए बनाया गया है वर्तमान में यह बहुत विकसित है।

गाइड, कोड, उदाहरण - https://github.com/navasmdc/MaterialDesignLibrary

गाइड कैसे करें एंड्रॉइड स्टूडियो में लाइब्रेरी जोड़ने के लिए 1.0 - मैं एंड्रॉइड स्टूडियो में सामग्री डिजाइन लाइब्रेरी कैसे आयात करूं?

खुश कोडिंग;)


1

इस लाइब्रेरी को आज़माएं:

https://github.com/avast/android-styled-dialogs

यह DialogFragmentsइसके बजाय AlertDialogs(@afollestad से एक की तरह) पर आधारित है । मुख्य लाभ: डायलॉग रोटेशन के बाद खारिज नहीं करते हैं और कॉलबैक अभी भी काम करते हैं।


मेरी लाइब्रेरी बहुत अधिक सक्षम है। और आप हमेशा एक DialogFragment के साथ एक डायलॉग लपेट सकते हैं। 😛
afollestad

1

किसी कारण से Android: textColor केवल शीर्षक रंग को अद्यतन करने के लिए लगता है। आप एक का उपयोग करके संदेश पाठ का रंग बदल सकते हैं

SpannableString.AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.MyDialogTheme));

AlertDialog dialog = builder.create();
                Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");
                wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                dialog.setMessage(wordtoSpan);
                dialog.show();

0

सामग्री डिजाइन स्टाइलिंग चेतावनी संवाद: कस्टम फ़ॉन्ट, बटन, रंग और आकार, ..

 MaterialAlertDialogBuilder(requireContext(),
                R.style.MyAlertDialogTheme
            )
                .setIcon(R.drawable.ic_dialogs_24px)
                .setTitle("Feedback")
                //.setView(R.layout.edit_text)
                .setMessage("Do you have any additional comments?")
                .setPositiveButton("Send") { dialog, _ ->

                    val input =
                        (dialog as AlertDialog).findViewById<TextView>(
                            android.R.id.text1
                        )
                    Toast.makeText(context, input!!.text, Toast.LENGTH_LONG).show()

                }
                .setNegativeButton("Cancel") { _, _ ->
                    Toast.makeText(requireContext(), "Clicked cancel", Toast.LENGTH_SHORT).show()
                }
                .show()

अंदाज:

  <style name="MyAlertDialogTheme" parent="Theme.MaterialComponents.DayNight.Dialog.Alert">
  
        <item name="android:textAppearanceSmall">@style/MyTextAppearance</item>
        <item name="android:textAppearanceMedium">@style/MyTextAppearance</item>
        <item name="android:textAppearanceLarge">@style/MyTextAppearance</item>

        <item name="buttonBarPositiveButtonStyle">@style/Alert.Button.Positive</item>
        <item name="buttonBarNegativeButtonStyle">@style/Alert.Button.Neutral</item>
        <item name="buttonBarNeutralButtonStyle">@style/Alert.Button.Neutral</item>

        <item name="android:backgroundDimEnabled">true</item>

        <item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.MyApp.Dialog.Rounded
        </item>

    </style>




    <style name="MyTextAppearance" parent="TextAppearance.AppCompat">
        <item name="android:fontFamily">@font/rosarivo</item>
    </style>


        <style name="Alert.Button.Positive" parent="Widget.MaterialComponents.Button.TextButton">
   <!--     <item name="backgroundTint">@color/colorPrimaryDark</item>-->
        <item name="backgroundTint">@android:color/transparent</item>
        <item name="rippleColor">@color/colorAccent</item>
        <item name="android:textColor">@color/colorPrimary</item>
       <!-- <item name="android:textColor">@android:color/white</item>-->
        <item name="android:textSize">14sp</item>
        <item name="android:textAllCaps">false</item>
    </style>


    <style name="Alert.Button.Neutral" parent="Widget.MaterialComponents.Button.TextButton">
        <item name="backgroundTint">@android:color/transparent</item>
        <item name="rippleColor">@color/colorAccent</item>
        <item name="android:textColor">@color/colorPrimary</item>
        <!--<item name="android:textColor">@android:color/darker_gray</item>-->
        <item name="android:textSize">14sp</item>
        <item name="android:textAllCaps">false</item>
    </style>


  <style name="ShapeAppearanceOverlay.MyApp.Dialog.Rounded" parent="">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSize">8dp</item>
    </style>

आउटपुट: यहां छवि विवरण दर्ज करें

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