วิธีการเปลี่ยนชุดรูปแบบสำหรับ AlertDialog


242

ฉันสงสัยว่ามีคนช่วยฉันออกไหม ฉันกำลังพยายามสร้าง AlertDialog แบบกำหนดเอง ในการทำเช่นนี้ฉันได้เพิ่มบรรทัดของรหัสต่อไปนี้ใน styles.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 นอกจากนี้ยังมีในโฟลเดอร์ res SDK ของ Android

ต่อไปนี้เป็นกิจกรรมหลัก

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 ฉันต้องตั้งค่าชุดรูปแบบกับบริบทปัจจุบัน

อย่างไรก็ตามฉันไม่สามารถทำให้แอปแสดง AlertDialog ที่กำหนดเองได้ ใครสามารถช่วยฉันออกด้วยสิ่งนี้?


มันช่วยได้ไหม androblip.huiges.nl/2010/05/09/theme-android-dialog
Karoly

ฉันพบ repo นี้ใน github จะมีประโยชน์มาก: github.com/StylingAndroid/AlertDialog
esilver

คำตอบ:


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 สาธารณะ เป็นผลให้ใน Android 2.3.3 มันล้มเหลวเมื่อสร้างตัวสร้าง
Catalin Morosan

18
@kaciula เป็น@android:style/Theme.Dialogสาธารณะหรือไม่ สามารถใช้แทนได้หรือไม่?
HRJ

24
ใช่. เป็นสาธารณะ ลองดูdeveloper.android.com/reference/android/R.style.htmlเพื่อดูรายการสไตล์สาธารณะทั้งหมด โปรดทราบว่าการตั้งชื่อใน API นั้นแตกต่างจากที่ใช้ในรหัส มี '_' แทนที่จะเป็น "." (Theme_Dialog)
Catalin Morosan

2
ฉันจะวางไฟล์ xml ด้านบนได้ที่ไหน
Chaitanya Chandurkar

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 เป็นแบบที่ดีขึ้น สุดยอดเคล็ดลับ
Johnny O

78

ฉันเขียนบทความในบล็อกของฉันเกี่ยวกับวิธีกำหนดค่าโครงร่างของ AlertDialog ด้วยไฟล์สไตล์ XML ปัญหาหลักคือคุณต้องการนิยามสไตล์ที่แตกต่างสำหรับพารามิเตอร์โครงร่างที่แตกต่างกัน นี่คือต้นแบบสำเร็จรูปตามสไตล์ AlertDialog ของ Holo Light Platform เวอร์ชัน 19 สำหรับไฟล์สไตล์ที่ควรครอบคลุมกลุ่มเค้าโครงด้านมาตรฐานเช่นขนาดตัวอักษรและสีพื้นหลัง

<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 ขอบคุณมาก! @nantoka
brainvision

2
@brainvision รายการบล็อกของฉันมีรายละเอียดโดยสังเขปเลย์เอาท์ของ AlertDialog นั้นมาจากสองคลาสที่แตกต่างกัน (Dialog และ AlertController) ซึ่งใช้รูปแบบไฟล์ param ที่แตกต่างกัน
Nantoka

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
สิ่งนี้ช่วยให้ฉันเปลี่ยนสีของปุ่มโต้ตอบได้
icarovirtual

1
ขอบคุณเพื่อนของฉันคุณบันทึกสัปดาห์ของฉัน !!
Clifton Steenkamp

31

ฉันกำลังดิ้นรนกับสิ่งนี้ - คุณสามารถจัดรูปแบบพื้นหลังของกล่องโต้ตอบที่ใช้android:alertDialogStyle="@style/AlertDialog"ในชุดรูปแบบของคุณ แต่จะละเว้นการตั้งค่าข้อความใด ๆ ที่คุณมี ดังที่ @rflexor กล่าวไว้ข้างต้นจะไม่สามารถทำได้กับ SDK ก่อนหน้า Honeycomb (คุณสามารถใช้งานได้Reflection )

สั้น ๆ โซลูชันของฉันคือการจัดรูปแบบพื้นหลังของกล่องโต้ตอบโดยใช้ด้านบนจากนั้นตั้งค่าหัวเรื่องและมุมมองเนื้อหาแบบกำหนดเอง (โดยใช้เลย์เอาต์ที่เหมือนกับใน SDK)

เสื้อคลุมของฉัน:

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 ได้อย่างไร
Gilbert

2
ฉันไม่ได้ฉันเข้าถึง R.id.alertTitle
โจเซฟเอิร์ล

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:

เพียงสร้าง alertDialog ด้วย Constructor นี้:

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

1
ไม่จำเป็นต้องขยายไดอะล็อกด้วยคลาสว่างใหม่เนื่องจากมีเวอร์ชั่นคอนสตรัคเตอร์ที่ใช้สไตล์ธีม
FindOut_Quran

@FindOut_Quran จุดคือการแสดงวิธีการแทนที่สไตล์ในคลาสโต้ตอบที่กำหนดเอง มันเป็นเพียงตัวอย่างคลาส Dialog จริงของคุณจะมีโค้ดอื่นอยู่ด้วย
Niall

8

ฉันคิดว่ามันไม่สามารถทำได้ อย่างน้อยก็ไม่มีกับ Builder ฉันกำลังทำงานกับ 1.6 และการใช้งานใน Builder.create () คือ:

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

ซึ่งเรียกตัวสร้าง "not-theme-aware" ของ 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);
    [...]
}

ที่ผู้สร้างไม่ได้เรียก

ถ้ากล่องโต้ตอบนั้นค่อนข้างทั่วไปอยู่แล้วฉันจะลองเขียนคลาสย่อยของ AlertDialog โดยเรียกตัวสร้างที่สองและใช้คลาสนั้นแทนตัวสร้างกลไก


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

ทุกคนที่พยายามทำสิ่งนี้ภายใน Fragment (โดยใช้ไลบรารีการสนับสนุนเช่น pre API 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);
        }
    }
}

@ RXlexor ให้ฉันเขยิบเพื่อขยาย AlertDialog และแสดงการกำหนดขอบคุณ


ตัวสร้างAlertDialog.Builder(Context, int)ใช้งานได้กับ API 11 ขึ้นไปเท่านั้น รหัสของคุณจะผิดพลาดในเวอร์ชั่น Android ก่อนหน้า
Joseph Earl

@JosephEarl (ใช้ไลบรารีการสนับสนุนเช่นก่อน API 11)
Blundell

ฉันไม่ดีคุณใช้ตัวสร้างการโต้ตอบและไม่สร้างตัวสร้างการโต้ตอบ
Joseph Earl

2

คำตอบของ Arve Waltin นั้นดูดีแม้ว่าฉันจะยังไม่ได้ทดสอบก็ตาม มีวิธีอื่นในกรณีที่คุณมีปัญหาในการที่จะทำงาน .... ขยายเป็นAlertDialog.Builderและแทนที่วิธีการทั้งหมด (เช่น. setText, setTitle,setViewฯลฯ ) จะไม่ได้ตั้งค่าที่เกิดขึ้นจริงโต้ตอบข้อความ / ชื่อ / มุมมอง แต่เพื่อสร้างมุมมองใหม่ภายใน มุมมองไดอะล็อกทำทุกอย่างในนั้น จากนั้นคุณมีอิสระที่จะออกแบบทุกสิ่งตามที่คุณต้องการ

ในการชี้แจงให้ชัดเจนเท่าที่ผู้ปกครองมีส่วนเกี่ยวข้องมุมมองจะถูกตั้งค่าและไม่มีอะไรอื่น

เท่าที่คลาสเสริมที่คุณกำหนดเองนั้นเกี่ยวข้องทุกอย่างจะทำในมุมมองนั้น


0

ฉันไม่แน่ใจว่าวิธีการแก้ปัญหาของ Arve จะทำงานในไดอะล็อกที่กำหนดเองพร้อมตัวสร้างที่มุมมองนั้นขยายผ่านทาง LayoutInflator ได้อย่างไร

การแก้ปัญหาควรแทรก ContextThemeWrapper ในเครื่องเติมลมผ่านcloneInContext():

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

-1

มันสามารถทำได้ง่ายๆโดยใช้ setView ของตัวสร้าง () คุณสามารถสร้างมุมมองที่คุณเลือกและฟีดลงในตัวสร้าง มันใช้งานได้ดี ฉันใช้ 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();

คุณคิดที่จะฟอร์แมตโค้ดด้วยโค้ดในตัวหรือไม่?
Adriano
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.