AlertDialog के लिए थीम कैसे बदलें


242

मैं सोच रहा था कि क्या कोई मेरी मदद कर सकता है। मैं एक कस्टम AlertDialog बनाने की कोशिश कर रहा हूं। ऐसा करने के लिए, मैंने style.xml में कोड की निम्न पंक्ति जोड़ी

<resources>
 <style name="CustomAlertDialog" parent="android:Theme.Dialog.Alert">
  <item name="android:windowBackground">@drawable/color_panel_background</item>
 </style>
</resources>
  • color_panel_background.9.png drawable folder में स्थित है। यह एंड्रॉइड एसडीके रेस फ़ोल्डर में भी उपलब्ध है।

निम्नलिखित मुख्य गतिविधि है।

package com.customdialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;

public class CustomDialog extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        this.setTheme(R.style.CustomAlertDialog);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("HELLO!");
        builder .setCancelable(false)
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               //MyActivity.this.finish();
           }
       })
       .setNegativeButton("No", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               //dialog.cancel();
           }
       });

        AlertDialog alertdialog = builder.create();
        alertdialog.show();
    }
}

एलर्टडायलॉग में थीम को लागू करने के लिए, मुझे थीम को वर्तमान संदर्भ पर सेट करना होगा।

हालाँकि, मैं अभी अनुकूलित AlertDialog दिखाने के लिए ऐप प्राप्त करने के लिए प्रतीत नहीं कर सकता। क्या कोई भी इस के साथ मेरी मदद कर सकता है?


क्या यह मदद करता है? androblip.huiges.nl/2010/05/09/theme-android-dialog
Karoly

मुझे
गितुब

जवाबों:


363

Dialog.java (Android src) में एक ContextThemeWrapper का उपयोग किया जाता है। तो आप इस विचार को कॉपी कर सकते हैं और कुछ ऐसा कर सकते हैं:

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

और फिर इसे अपनी इच्छानुसार स्टाइल करें:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AlertDialogCustom" parent="@android:style/Theme.Dialog">
        <item name="android:textColor">#00FF00</item>
        <item name="android:typeface">monospace</item>
        <item name="android:textSize">10sp</item>
    </style>
</resources>

62
@Android: style / AlertDialog का उपयोग न करें। यह सार्वजनिक API में नहीं है। नतीजतन, एंड्रॉइड 2.3.3 में, यह बिल्डर बनाते समय दुर्घटनाग्रस्त हो जाता है।
कैटालिन मोरोसन

18
@kaciula @android:style/Theme.Dialogसार्वजनिक है? क्या इसके बदले इसका उपयोग किया जा सकता है?
एचआरजे

24
हाँ। यह सार्वजनिक है। की जाँच करें developer.android.com/reference/android/R.style.html सभी सार्वजनिक शैलियों की एक सूची के लिए। ध्यान रखें कि एपीआई का नामकरण कोड में प्रयुक्त की तुलना में अलग है। "के बजाय एक '_' है।" (Theme_Dialog)
कैटालिन मोरोसन

2
मैं उपरोक्त xml फ़ाइल कहाँ रखूँगा?
चैतन्य चंदुरकर 13

3
संगतता थीम का एक नया विषय के लिए, मैं Theme.AppCompat.Light.Dialog.Alertआपके कस्टम शैली के माता-पिता के रूप में शैली का उपयोग करने का सुझाव दूंगा। लेकिन, यदि आप ऐसा करते हैं, तो सुनिश्चित करें कि आप आयात कर रहे हैं import android.support.v7.app.AlertDialog; और नहींimport android.app.AlertDialog
w3bshark

93

मैं इस AlertDialogविषय से संबंधित मुद्दे का उपयोग कर रहा था sdk 1.6 यहाँ वर्णित के रूप में: http://markmail.org/message/mj5ut56irkrkc4nr

मैंने निम्न कार्य करके समस्या हल की:

  new AlertDialog.Builder(
  new ContextThemeWrapper(context, android.R.style.Theme_Dialog))

उम्मीद है की यह मदद करेगा।


2
कई प्रासंगिक विषय हैं; मेरे मामले में android.R.style.Theme_Holo_Dialog एक बेहतर फिट था। महान टिप।
जॉनी ओ

78

मैंने अपने ब्लॉग में एक लेख लिखा है कि XML स्टाइल फ़ाइलों के साथ एक अलर्टडायलॉग के लेआउट को कैसे कॉन्फ़िगर किया जाए। मुख्य समस्या यह है कि आपको विभिन्न लेआउट मापदंडों के लिए अलग-अलग शैली की परिभाषाएं चाहिए। यहां एक स्टाइल फ़ाइल के लिए Holo Light Platform संस्करण 19 के AlertDialog शैली पर आधारित एक बॉयलरप्लेट है, जिसमें टेक्स्ट आकारों और पृष्ठभूमि रंगों जैसे मानक लेआउट पहलुओं का एक गुच्छा शामिल होना चाहिए।

<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
    ...
    <item name="android:alertDialogTheme">@style/MyAlertDialogTheme</item>
    <item name="android:alertDialogStyle">@style/MyAlertDialogStyle</item>
    ...
</style>

<style name="MyBorderlessButton">
    <!-- Set background drawable and text size of the buttons here -->
    <item name="android:background">...</item>
    <item name="android:textSize">...</item>
</style>

<style name="MyButtonBar">
    <!-- Define a background for the button bar and a divider between the buttons here -->
    <item name="android:divider">....</item>
    <item name="android:dividerPadding">...</item>
    <item name="android:showDividers">...</item>
    <item name="android:background">...</item>
</style>

<style name="MyAlertDialogTitle">
    <item name="android:maxLines">1</item>
    <item name="android:scrollHorizontally">true</item>
</style>

<style name="MyAlertTextAppearance">
    <!-- Set text size and color of title and message here -->
    <item name="android:textSize"> ... </item>
    <item name="android:textColor">...</item>
</style>

<style name="MyAlertDialogTheme">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowTitleStyle">@style/MyAlertDialogTitle</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:textAppearanceMedium">@style/MyAlertTextAppearance</item>
    <!-- If you don't want your own button bar style use
            @android:style/Holo.Light.ButtonBar.AlertDialog
            and
            ?android:attr/borderlessButtonStyle
         instead of @style/MyButtonBar and @style/MyBorderlessButton -->
    <item name="android:buttonBarStyle">@style/MyButtonBar</item>
    <item name="android:buttonBarButtonStyle">@style/MyBorderlessButton</item>
</style>

<style name="MyAlertDialogStyle">
    <!-- Define background colors of title, message, buttons, etc. here -->
    <item name="android:fullDark">...</item>
    <item name="android:topDark">...</item>
    <item name="android:centerDark">...</item>
    <item name="android:bottomDark">...</item>
    <item name="android:fullBright">...</item>
    <item name="android:topBright">...</item>
    <item name="android:centerBright">...</item>
    <item name="android:bottomBright">...</item>
    <item name="android:bottomMedium">...</item>
    <item name="android:centerMedium">...</item>
</style>

2
क्या मैं आपसे पूछ सकता हूँ कि हम दोनों को AlertDialog अनुकूलन के लिए शैली और विषय की आवश्यकता क्यों है? आपका बहुत बहुत धन्यवाद! @ नान्टोका
ब्रेनविजन

2
@brainvision मेरे ब्लॉग प्रविष्टि में विवरण है लेकिन संक्षेप में एक AlertDialog का लेआउट दो अलग-अलग वर्गों (Dialog और AlertController) से आता है जो विभिन्न लेआउट परम फ़ाइलों का उपयोग करते हैं।
नैन्टोका

46
 <style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">@color/colorAccent</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">@color/teal</item>
</style>





new AlertDialog.Builder(new ContextThemeWrapper(context,R.style.AlertDialogCustom))
            .setMessage(Html.fromHtml(Msg))
            .setPositiveButton(posBtn, okListener)
            .setNegativeButton(negBtn, null)
            .create()
            .show();

3
सबसे सरल, अभी तक तेजी से समाधान!
FonzTech

4
ठीक है, कैसे "AppTheme" में इसे घोषित करने के लिए कुछ विशेषता का उपयोग करें?
डेडफिश

2
इससे मुझे संवाद के बटन रंग बदलने में मदद मिली।
at

1
धन्यवाद मेरे दोस्त, आपने मेरा सप्ताह बचा लिया !!
क्लिफ्टन स्टीनकैंप

31

मैं इसके साथ संघर्ष कर रहा था - आप android:alertDialogStyle="@style/AlertDialog"अपने विषय का उपयोग करके संवाद की पृष्ठभूमि को स्टाइल कर सकते हैं , लेकिन यह आपके पास किसी भी पाठ सेटिंग्स को अनदेखा करता है। जैसा कि @rflexor ने कहा कि यह हनीकॉम्ब से पहले एसडीके के साथ नहीं किया जा सकता है (अच्छी तरह से आप उपयोग कर सकते हैं Reflection)।

मेरा समाधान, संक्षेप में, उपरोक्त का उपयोग करके संवाद की पृष्ठभूमि को स्टाइल करना था, फिर एक कस्टम शीर्षक और सामग्री दृश्य (लेआउट का उपयोग करना जो एसडीके में उन जैसे ही हैं) सेट करें।

मेरा आवरण:

import com.mypackage.R;

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomAlertDialogBuilder extends AlertDialog.Builder {

    private final Context mContext;
    private TextView mTitle;
    private ImageView mIcon;
    private TextView mMessage;

    public CustomAlertDialogBuilder(Context context) {
        super(context);
        mContext = context; 

        View customTitle = View.inflate(mContext, R.layout.alert_dialog_title, null);
        mTitle = (TextView) customTitle.findViewById(R.id.alertTitle);
        mIcon = (ImageView) customTitle.findViewById(R.id.icon);
        setCustomTitle(customTitle);

        View customMessage = View.inflate(mContext, R.layout.alert_dialog_message, null);
        mMessage = (TextView) customMessage.findViewById(R.id.message);
        setView(customMessage);
    }

    @Override
    public CustomAlertDialogBuilder setTitle(int textResId) {
        mTitle.setText(textResId);
        return this;
    }
    @Override
    public CustomAlertDialogBuilder setTitle(CharSequence text) {
        mTitle.setText(text);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setMessage(int textResId) {
        mMessage.setText(textResId);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setMessage(CharSequence text) {
        mMessage.setText(text);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setIcon(int drawableResId) {
        mIcon.setImageResource(drawableResId);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setIcon(Drawable icon) {
        mIcon.setImageDrawable(icon);
        return this;
    }

}

alert_dialog_title.xml (SDK से लिया गया)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
    <LinearLayout
            android:id="@+id/title_template"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:layout_marginTop="6dip"
            android:layout_marginBottom="9dip"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip">

            <ImageView android:id="@+id/icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="top"
                android:paddingTop="6dip"
                android:paddingRight="10dip"
                android:src="@drawable/ic_dialog_alert" />
            <TextView android:id="@+id/alertTitle"
                style="@style/?android:attr/textAppearanceLarge"
                android:singleLine="true"
                android:ellipsize="end"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
        <ImageView android:id="@+id/titleDivider"
            android:layout_width="fill_parent"
            android:layout_height="1dip"
            android:scaleType="fitXY"
            android:gravity="fill_horizontal"
            android:src="@drawable/divider_horizontal_bright" />
</LinearLayout>

alert_dialog_message.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/scrollView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingTop="2dip"
            android:paddingBottom="12dip"
            android:paddingLeft="14dip"
            android:paddingRight="10dip">
    <TextView android:id="@+id/message"
                style="?android:attr/textAppearanceMedium"
                android:textColor="@color/dark_grey"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="5dip" />
</ScrollView>

तो बस अपने संवाद बनाने CustomAlertDialogBuilderके AlertDialog.Builderलिए उपयोग करें, और बस फोन setTitleऔर setMessageहमेशा की तरह।


3
आपने android.R.internal.id.alerttitle का उपयोग कैसे किया?
गिल्बर्ट

2
मैंने नहीं किया, मैंने
यूसुफ अर्ल

28

आप बिल्डर को आरंभ करने पर सीधे एक विषय निर्दिष्ट कर सकते हैं:

AlertDialog.Builder builder = new AlertDialog.Builder(
                    getActivity(), R.style.MyAlertDialogTheme);

फिर अपने विषय को अपने में अनुकूलित करें values/styles.xml

<!-- Alert Dialog -->
<style name="MyAlertDialogTheme" parent="Theme.AppCompat.Dialog.Alert">
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:colorBackground">@color/alertDialogBackground</item>
    <item name="android:windowBackground">@color/alertDialogBackground</item>
</style>

1
उत्तम। केवल एक चीज मैं इस्तेमाल कियाTheme.AppCompat.Light.Dialog.Alert
ekashking

11

कस्टम संवाद के लिए:

संवाद निर्माता के super(context,R.style.<dialog style>)बजाय बस कॉल करेंsuper(context)

public class MyDialog extends Dialog
{
    public MyDialog(Context context)
    {
       super(context, R.style.Theme_AppCompat_Light_Dialog_Alert)
    }
}


AlertDialog के लिए:

बस इस निर्माता के साथ अलर्टडायलॉग बनाएं:

 new AlertDialog.Builder(
 new ContextThemeWrapper(context, android.R.style.Theme_Dialog))

1
डायलॉग को एक नए खाली वर्ग के साथ विस्तारित करने की आवश्यकता नहीं है, क्योंकि पहले से ही एक कंस्ट्रक्टर संस्करण है जो थीम शैली लेता है।
FindOut_Quran

@FindOut_Quran बिंदु यह दिखाने के लिए है कि एक कस्टम डायलॉग क्लास में शैली को कैसे ओवरराइड किया जाए। यह सिर्फ एक उदाहरण है, आपके वास्तविक संवाद वर्ग में कुछ अन्य कोड भी होंगे।
निल

8

मुझे लगता है कि यह नहीं किया जा सकता है। कम से कम बिल्डर के साथ तो नहीं। मैं 1.6 और Builder.create में कार्यान्वयन के साथ काम कर रहा हूँ:

public AlertDialog create() {
    final AlertDialog dialog = new AlertDialog(P.mContext);
    P.apply(dialog.mAlert);
    [...]
}

जो AlertDialog के "नॉट-थीम-अवेयर" कंस्ट्रक्टर को कॉल करता है, जो इस तरह दिखता है:

protected AlertDialog(Context context) {
    this(context, com.android.internal.R.style.Theme_Dialog_Alert);
}

बदलते विषयों के लिए AlertDialog में एक दूसरा निर्माणकर्ता है:

protected AlertDialog(Context context, int theme) {
    super(context, theme);
    [...]
}

कि बिल्डर अभी कॉल नहीं करता है।

यदि डायलॉग वैसे भी बहुत सामान्य है, तो मैं एलर्टडायलॉग का एक उपवर्ग लिखने की कोशिश करूंगा, दूसरे कंस्ट्रक्टर को कॉल करूंगा और बिल्डर-तंत्र के बजाय उस वर्ग का उपयोग करूंगा।


4

बेहतर तरीका यह है कि आप कस्टम डायलॉग का उपयोग करें और अपनी आवश्यकताओं के अनुसार कस्टमाइज़ करें। कस्टम डायलॉग उदाहरण .....

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

public class CustomDialogUI {
Dialog dialog;
Vibrator vib;
RelativeLayout rl;

@SuppressWarnings("static-access")
public void dialog(final Context context, String title, String message,
        final Runnable task) {
    dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.custom);
    dialog.setCancelable(false);
    TextView m = (TextView) dialog.findViewById(R.id.message);
    TextView t = (TextView) dialog.findViewById(R.id.title);
    final Button n = (Button) dialog.findViewById(R.id.button2);
    final Button p = (Button) dialog.findViewById(R.id.next_button);
    rl = (RelativeLayout) dialog.findViewById(R.id.rlmain);
    t.setText(bold(title));
    m.setText(message);
    dialog.show();
    n.setText(bold("Close"));
    p.setText(bold("Ok"));
    // color(context,rl);
    vib = (Vibrator) context.getSystemService(context.VIBRATOR_SERVICE);
    n.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            vib.vibrate(15);
            dialog.dismiss();
        }
    });
    p.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            vib.vibrate(20);
            dialog.dismiss();
            task.run();
        }
    });
}
 //customize text style bold italic....
public SpannableString bold(String s) {
    SpannableString spanString = new SpannableString(s);
    spanString.setSpan(new StyleSpan(Typeface.BOLD), 0,
            spanString.length(), 0);
    spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
    // spanString.setSpan(new StyleSpan(Typeface.ITALIC), 0,
    // spanString.length(), 0);
    return spanString;
}

}

यहाँ xml लेआउट है

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
>

<RelativeLayout
    android:id="@+id/rlmain"
    android:layout_width="fill_parent"
    android:layout_height="150dip"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:background="#569CE3" >

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="25dip"
        android:layout_marginTop="10dip" >

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="Are you Sure?"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ffffff"
            android:textSize="13dip" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/relativeLayout2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/relativeLayout1"
        android:layout_alignRight="@+id/relativeLayout1"
        android:layout_below="@+id/relativeLayout1"
        android:layout_marginTop="5dip" >
    </RelativeLayout>

    <ProgressBar
        android:id="@+id/process"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="3dip"
        android:layout_marginTop="3dip" />

    <RelativeLayout
        android:id="@+id/relativeLayout3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/relativeLayout2"
        android:layout_below="@+id/relativeLayout2"
        android:layout_toLeftOf="@+id/process" >

        <TextView
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="Medium Text"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ffffff"
            android:textSize="13dip"/>

    </RelativeLayout>

    <Button
        android:id="@+id/next_button"
        android:layout_width="90dip"
        android:layout_height="35dip"
        android:layout_alignParentBottom="true"
        android:textColor="@drawable/button_text_color"
         android:background="@drawable/blue_button"
         android:layout_marginBottom="5dp"
           android:textSize="10dp"

        android:layout_alignRight="@+id/relativeLayout3"
        android:text="Okay" />

    <Button
        android:id="@+id/button2"
        android:text="Cancel"
        android:textColor="@drawable/button_text_color"
        android:layout_width="90dip"
        android:layout_height="35dip"
        android:layout_marginBottom="5dp"
         android:background="@drawable/blue_button"
         android:layout_marginRight="7dp"
        android:textSize="10dp"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/next_button"
         />

</RelativeLayout>


7
कस्टम दृश्य का उपयोग और उपयोग करना 2 अलग-अलग चीजें हैं और अलग-अलग उद्देश्य हैं।
jmc34

3

किसी को भी एक टुकड़ा के भीतर यह करने की कोशिश कर रहा है (समर्थन पुस्तकालय यानी पूर्व एपीआई 11 का उपयोग करके) इसके साथ जाना चाहिए:

public class LoadingDialogFragment extends DialogFragment {
    public static final String ID = "loadingDialog";

    public static LoadingDialogFragment newInstance() {
        LoadingDialogFragment f = new LoadingDialogFragment();

        return f;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        StyleAlertDialog adb = new StyleAlertDialog(getActivity(), R.style.Your_Style);
        adb.setView(getActivity().getLayoutInflater().inflate(R.layout.fragment_dialog_layout, null));
        return adb;
    }

    private class StyleAlertDialog extends AlertDialog {
        protected StyleAlertDialog(Context context, int theme) {
            super(context, theme);
        }
    }
}

@Rflexor ने मुझे AlertDialog का विस्तार करने और कंस्ट्रक्टर को धन्यवाद देने के लिए धन्यवाद दिया


कंस्ट्रक्टर AlertDialog.Builder(Context, int)केवल एपीआई 11 और इसके बाद के संस्करण पर काम करता है। आपका कोड पहले के Android संस्करणों पर क्रैश हो जाएगा।
जोसेफ अर्ल

@ जोसेफर्ल (सपोर्ट लाइब्रेरी (पूर्व एपीआई 11 का उपयोग करके)
ब्लंडेल

मेरा बुरा, आप डायलॉग कंस्ट्रक्टर का उपयोग करते हैं कि डायलॉग बिल्डर कंस्ट्रक्टर का।
जोसेफ अर्ल

2

अरव वाल्टिन का समाधान अच्छा लगता है, हालांकि मैंने अभी तक इसका परीक्षण नहीं किया है। वहाँ के मामले में एक और समाधान आप मुसीबत काम के लिए हो रही है कि है .... बढ़ाएँ है AlertDialog.Builderऔर सभी तरीकों को ओवरराइड (जैसे। setText, setTitle,setView , आदि) वास्तविक संवाद का पाठ / शीर्षक / दृश्य सेट नहीं है, लेकिन भीतर एक नया दृश्य बनाने के लिए संवाद का दृश्य वहाँ सब कुछ करता है। फिर आप अपनी इच्छानुसार सब कुछ करने के लिए स्वतंत्र हैं।

स्पष्ट करने के लिए, जहां तक ​​मूल वर्ग का संबंध है, दृश्य सेट है, और कुछ नहीं।

जहां तक ​​आपके कस्टम एक्सटेंडेड क्लास का सवाल है, तो उस दृश्य के भीतर सब कुछ किया जाता है।


0

मुझे यकीन नहीं है कि आर्वे का समाधान बिल्डर के साथ एक कस्टम डायलॉग में कैसे काम करेगा जहां व्यू को लेआउटइन्फ़्लिटर के माध्यम से फुलाया जाता है।

समाधान के माध्यम से प्रवाह में ContextThemeWrapper सम्मिलित करना चाहिए cloneInContext():

View sensorView = LayoutInflater.from(context).cloneInContext(
     new ContextThemeWrapper(context, R.style.AppTheme_DialogLight)
).inflate(R.layout.dialog_fingerprint, null);

-1

यह बस बिल्डर के सेट व्यू () का उपयोग करके किया जा सकता है। आप अपनी पसंद का कोई भी दृश्य बना सकते हैं और बिल्डर को खिला सकते हैं। यह अच्छा काम करता है। मैं एक कस्टम TextView का उपयोग करता हूं जो संवाद निर्माता द्वारा प्रस्तुत किया जाता है। मैंने संदेश सेट नहीं किया है और इस स्थान का उपयोग मेरे अभिरुचि वाले टेक्स्टव्यू को प्रस्तुत करने के लिए किया जाता है।


-12
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
builder.setMessage("Description");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();

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