web-dev-qa-db-fra.com

Comment créer une boîte de dialogue personnalisée dans Android?

Je veux créer une boîte de dialogue personnalisée comme ci-dessous

enter image description here

J'ai essayé les choses suivantes.

  1. J'ai créé une sous-classe de AlertDialog.Builder et utilisé un titre personnalisé et une vue de contenu personnalisée. Je l'ai utilisé, mais le résultat n'a pas été celui attendu.

  2. Une autre tentative consistait à sous-classer DialogFragment et à personnaliser le dialogue dans onCreateDialog, mais que le résultat n'était pas comme prévu.

  3. Ensuite, j'ai essayé d'utiliser une classe simple Dialog . Le résultat n'était pas comme prévu.

Dans les trois cas, le problème est que lorsque je néglige la vue du titre, la taille de la boîte de dialogue n’est pas celle attendue et que lorsque j'utilise la vue du titre, le résultat est une bordure épaisse entourant la vue du contenu (qui a vraiment l’air mauvais). Maintenant, j'ai deux questions en tête ...

  1. Comment puis-je y arriver? Comme j'ai déjà essayé beaucoup de choses, une réponse directe sera plus appréciée.

  2. Quel est le meilleur moyen d'afficher une boîte de dialogue d'erreur ou d'alerte dans une application Android?

EDITDocumentation pour les développeurs Android recommande d'utiliser DialogFragments ou Dialogs pour afficher des messages d'erreur/alerte à l'utilisateur. Cependant, à un moment donné, ils disent ...

Conseil: Si vous souhaitez une boîte de dialogue personnalisée, vous pouvez plutôt afficher une activité sous la forme d'une boîte de dialogue au lieu d'utiliser les API de boîte de dialogue. Créez simplement une activité et définissez son thème sur Theme.Holo.Dialog dans l'élément manifeste.

Quel est le sens de cela? N'est-ce pas trop d'utiliser une activité uniquement pour afficher un message d'erreur ???

323
Amit

Ici, j'ai créé un dialogue simple, comme:

Dialog Box

custom_dialog.xml

<?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="80dp"
    Android:background="#3E80B4"
    Android:orientation="vertical" >

    <TextView
        Android:id="@+id/txt_dia"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:layout_margin="10dp"
        Android:text="Do you realy want to exit ?"
        Android:textColor="@Android:color/white"
        Android:textSize="15dp"
        Android:textStyle="bold"/>


    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:background="#3E80B4"
        Android:orientation="horizontal" >

        <Button
            Android:id="@+id/btn_yes"
            Android:layout_width="100dp"
            Android:layout_height="30dp"
            Android:background="@Android:color/white"
            Android:clickable="true"
            Android:text="Yes"
            Android:textColor="#5DBCD2"
            Android:textStyle="bold" />

        <Button
            Android:id="@+id/btn_no"
            Android:layout_width="100dp"
            Android:layout_height="30dp"
            Android:layout_marginLeft="5dp"
            Android:background="@Android:color/white"
            Android:clickable="true"
            Android:text="No"
            Android:textColor="#5DBCD2"
            Android:textStyle="bold" />
    </LinearLayout>

</LinearLayout>

Vous devez extends Dialog et implements OnClickListener

public class CustomDialogClass extends Dialog implements
    Android.view.View.OnClickListener {

  public Activity c;
  public Dialog d;
  public Button yes, no;

  public CustomDialogClass(Activity a) {
    super(a);
    // TODO Auto-generated constructor stub
    this.c = a;
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.custom_dialog);
    yes = (Button) findViewById(R.id.btn_yes);
    no = (Button) findViewById(R.id.btn_no);
    yes.setOnClickListener(this);
    no.setOnClickListener(this);

  }

  @Override
  public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btn_yes:
      c.finish();
      break;
    case R.id.btn_no:
      dismiss();
      break;
    default:
      break;
    }
    dismiss();
  }
}

Comment appeler un dialogue?

R.id.TXT_Exit:
CustomDialogClass cdd=new CustomDialogClass(Values.this);
cdd.show();  

Mises à jour

Après un long moment un de mes amis m'a demandé de faire un dialogue de forme incurvée avec un fond transparent. Donc, ici je l'ai mis en œuvre.

enter image description here

Pour créer une forme courbe, vous devez créer un curve_shap.XML séparé comme ci-dessous,

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <solid Android:color="#000000" />

    <stroke
        Android:width="2dp"
        Android:color="#ffffff" />

    <corners
        Android:bottomLeftRadius="20dp"
        Android:bottomRightRadius="20dp"
        Android:topLeftRadius="20dp"
        Android:topRightRadius="20dp" />

</shape>

Maintenant, ajoutez ce curve_shap.XML dans votre présentation principale. Dans mon cas, j'ai utilisé LinearLayout

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
        Android:layout_height="80dp"
        Android:background="@drawable/curve_shap"
        Android:orientation="vertical" >
...
</LinearLayout>

Comment appeler ça?

CustomDialogClass cdd = new CustomDialogClass(MainActivity.this);
cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
cdd.show();

J'espère que cela fonctionne pour vous.

517
Chintan Khetiya

Ceci est un exemple de dialogue, créer avec XML.

enter image description here

le code suivant xml est juste un exemple, la conception ou la vue est implémentée ici:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="#ffffffff">

<ImageView
    Android:layout_width="match_parent"
    Android:layout_height="120dp"
    Android:id="@+id/a"
    Android:gravity="center"
    Android:background="#DA5F6A"
    Android:src="@drawable/dialog_cross"
    Android:scaleType="fitCenter" />

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="TEXTO"
    Android:id="@+id/text_dialog"
    Android:layout_below="@+id/a"
    Android:layout_marginTop="20dp"
    Android:layout_marginLeft="4dp"
    Android:layout_marginRight="4dp"
    Android:layout_marginBottom="20dp"
    Android:textSize="18sp"
    Android:textColor="#ff000000"
    Android:layout_centerHorizontal="true"
    Android:gravity="center_horizontal" />

<Button
    Android:layout_width="wrap_content"
    Android:layout_height="30dp"
    Android:text="OK"
    Android:id="@+id/btn_dialog"
    Android:gravity="center_vertical|center_horizontal"
    Android:layout_below="@+id/text_dialog"
    Android:layout_marginBottom="20dp"
    Android:background="@drawable/btn_flat_red_selector"
    Android:layout_centerHorizontal="true"
    Android:textColor="#ffffffff" />

</RelativeLayout>

ces lignes de code sont des ressources de dessinables:

Android:src="@drawable/dialog_cross"
Android:background="@drawable/btn_flat_red_selector"

vous pouvez faire un dialogue de dialogue de classe étendu, quelque chose comme ceci:

public class ViewDialog {

    public void showDialog(Activity activity, String msg){
        final Dialog dialog = new Dialog(activity);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.dialog);

        TextView text = (TextView) dialog.findViewById(R.id.text_dialog);
        text.setText(msg);

        Button dialogButton = (Button) dialog.findViewById(R.id.btn_dialog);
        dialogButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });

        dialog.show();

    }
}

enfin le formulaire d’appel, sur votre activité par exemple:

ViewDialog alert = new ViewDialog();
alert.showDialog(getActivity(), "Error de conexión al servidor");

J'espère que ça marchera pour vous.

165
Alex Zaraos

Un autre moyen facile de le faire.

étape 1) créer une mise en page avec les identifiants appropriés.

étape 2) utilisez le code suivant où vous le souhaitez.

LayoutInflater factory = LayoutInflater.from(this);
final View deleteDialogView = factory.inflate(R.layout.mylayout, null);
final AlertDialog deleteDialog = new AlertDialog.Builder(this).create();
deleteDialog.setView(deleteDialogView);
deleteDialogView.findViewById(R.id.yes).setOnClickListener(new OnClickListener() {    
    @Override
    public void onClick(View v) {
        //your business logic 
        deleteDialog.dismiss();
    }
});
deleteDialogView.findViewById(R.id.no).setOnClickListener(new OnClickListener() {    
    @Override
    public void onClick(View v) {
        deleteDialog.dismiss();    
    }
});

deleteDialog.show();
84
Swapnil

Ajoutez le thème ci-dessous dans values -> style.xml

<style name="Theme_Dialog" parent="Android:Theme.Light">
     <item name="Android:windowNoTitle">true</item>
     <item name="Android:windowBackground">@Android:color/transparent</item>
</style>

Utilisez ce thème dans votre méthode onCreateDialog comme ceci:

Dialog dialog = new Dialog(FlightBookActivity.this,R.style.Theme_Dialog);

Définissez votre structure de dialogue, y compris la barre de titre dans le fichier XML et définissez ce fichier XML comme suit:

dialog.setContentView(R.layout.your_dialog_layout);
34
Vineet Shukla

Simple commence par créer une classe

 public class ViewDialog {

        public void showDialog(Activity activity, String msg){
            final Dialog dialog = new Dialog(activity);
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.setCancelable(false);
            dialog.setContentView(R.layout.custom_dialogbox_otp);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));

            TextView text = (TextView) dialog.findViewById(R.id.txt_file_path);
            text.setText(msg);

            Button dialogBtn_cancel = (Button) dialog.findViewById(R.id.btn_cancel);
            dialogBtn_cancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
//                    Toast.makeText(getApplicationContext(),"Cancel" ,Toast.LENGTH_SHORT).show();
                    dialog.dismiss();
                }
            });

            Button dialogBtn_okay = (Button) dialog.findViewById(R.id.btn_okay);
            dialogBtn_okay.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
//                    Toast.makeText(getApplicationContext(),"Okay" ,Toast.LENGTH_SHORT).show();
                    dialog.cancel();
                }
            });

            dialog.show();
        }
    }

puis créez un custom_dialogbox_otp

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="330dp"
    Android:layout_height="160dp"
    Android:background="#00555555"
    Android:orientation="vertical"
    Android:padding="5dp"
    Android:weightSum="100">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:background="@drawable/round_layout_otp"
        Android:orientation="vertical"
        Android:padding="7dp"
        Android:weightSum="100">

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:layout_weight="60"
            Android:orientation="horizontal"
            Android:weightSum="100">

            <LinearLayout
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:layout_weight="80"
                Android:gravity="center">

                <ImageView
                    Android:id="@+id/a"
                    Android:layout_width="50dp"
                    Android:layout_height="50dp"
                    Android:background="#DA5F6A"
                    Android:gravity="center"
                    Android:scaleType="fitCenter"
                    Android:src="@mipmap/infoonetwo" />

            </LinearLayout>

            <LinearLayout
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:layout_weight="20">

                <TextView
                    Android:id="@+id/txt_file_path"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:layout_gravity="center"
                    Android:singleLine="true"
                    Android:text="TEXTO"
                    Android:textColor="#FFFFFF"
                    Android:textSize="17sp"
                    Android:textStyle="bold" />
            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:layout_weight="40"
            Android:background="@drawable/round_layout_white_otp"
            Android:orientation="vertical"
            Android:weightSum="100">

            <LinearLayout
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:layout_gravity="center"
                Android:layout_weight="60">

                <TextView
                    Android:layout_width="match_parent"
                    Android:layout_height="match_parent"
                    Android:gravity="center"
                    Android:text="Do you wanna Exit..?"
                    Android:textColor="#ff000000"
                    Android:textSize="15dp"
                    Android:textStyle="bold" />
            </LinearLayout>

            <LinearLayout
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:layout_weight="40"
                Android:orientation="horizontal"
                Android:weightSum="100">


                <LinearLayout
                    Android:layout_width="match_parent"
                    Android:layout_height="match_parent"
                    Android:layout_marginRight="30dp"
                    Android:layout_weight="50"
                    Android:gravity="center|right">

                    <Button
                        Android:id="@+id/btn_cancel"
                        Android:layout_width="80dp"
                        Android:layout_height="25dp"
                        Android:background="@drawable/round_button"
                        Android:gravity="center"
                        Android:text="CANCEL"
                        Android:textSize="13dp"
                        Android:textStyle="bold"
                        Android:textColor="#ffffffff" />

                </LinearLayout>

                <LinearLayout
                    Android:layout_width="match_parent"
                    Android:layout_height="match_parent"
                    Android:layout_marginLeft="30dp"
                    Android:layout_weight="50"
                    Android:gravity="center|left">


                    <Button
                        Android:id="@+id/btn_okay"
                        Android:layout_width="80dp"
                        Android:layout_height="25dp"
                        Android:background="@drawable/round_button"
                        Android:text="OKAY"
                        Android:textSize="13dp"
                        Android:textStyle="bold"
                        Android:textColor="#ffffffff" />

                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

puis, dans votre dessin, créez sous les fichiers xml.
pour round_layout_white_otp.xml

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >

    <!-- <corners Android:radius="10dp" /> -->
    <corners
        Android:bottomLeftRadius="18dp"
        Android:bottomRightRadius="16dp"
        Android:topLeftRadius="38dp"
        Android:topRightRadius="36dp" />
    <solid Android:color="#C0C0C0" />
    </shape>

pour round_layout_otp.xml

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >

    <!-- <corners Android:radius="10dp" /> -->
    <corners
        Android:bottomLeftRadius="18dp"
        Android:bottomRightRadius="16dp"
        Android:topLeftRadius="38dp"
        Android:topRightRadius="38dp" />
    <solid Android:color="#DA5F6A" />
    </shape>

round_button

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >

    <!-- <corners Android:radius="10dp" /> -->
    <corners
        Android:bottomLeftRadius="7dp"
        Android:bottomRightRadius="7dp"
        Android:topLeftRadius="7dp"
        Android:topRightRadius="7dp" />
    <solid Android:color="#06A19E" />
    </shape>

Enfin, utilisez le code ci-dessous pour afficher le dialogue ur:)

ViewDialog alert = new ViewDialog();
        alert.showDialog(ReceivingOTPRegActivity.this, "OTP has been sent to your Mail ");

votre sortie:)

enter image description here

20
Agilanbu
public static void showCustomAlertDialog(Context context, String name,
            String id, String desc, String fromDate, String toDate,
            String resions) {
        final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                context);
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.dialog, null);
        alertDialogBuilder.setView(view);
        alertDialogBuilder.setCancelable(false);
        final AlertDialog dialog = alertDialogBuilder.create();
        dialog.show();
        txt_empId = (TextView) view.findViewById(R.id.txt_dialog_empcode);
        txt_empName = (TextView) view.findViewById(R.id.txt_dialog_empname);
        txt_desc = (TextView) view.findViewById(R.id.txt_dialog_desc);
        txt_startDate = (TextView) view.findViewById(R.id.txt_dialog_startDate);
        txt_resions = (TextView) view.findViewById(R.id.txt_dialog_endDate);
        txt_empId.setTypeface(Utils.setLightTypeface(context));
        txt_empName.setTypeface(Utils.setLightTypeface(context));
        txt_desc.setTypeface(Utils.setLightTypeface(context));
        txt_startDate.setTypeface(Utils.setLightTypeface(context));
        txt_resions.setTypeface(Utils.setLightTypeface(context));

        txt_empId.setText(id);
        txt_empName.setText(name);

        txt_desc.setText(desc);
        txt_startDate.setText(fromDate + "\t to \t" + toDate);
        txt_resions.setText(resions);



        btn_accept = (Button) view.findViewById(R.id.btn_dialog_accept);
        btn_reject = (Button) view.findViewById(R.id.btn_dialog_reject);
        btn_cancel = (Button) view.findViewById(R.id.btn_dialog_cancel);
        btn_accept.setTypeface(Utils.setBoldTypeface(context));
        btn_reject.setTypeface(Utils.setBoldTypeface(context));
        btn_cancel.setTypeface(Utils.setBoldTypeface(context));

        btn_cancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dialog.dismiss();

            }
        });

    }
12
Sandeep Kumar Patil

Le moyen le plus simple de créer une boîte de dialogue personnalisée:

  1. Initialiser et afficher le dialogue:

     ViewDialog alertDialoge = new ViewDialog();
     alertDialoge.showDialog(getActivity(), "PUT DIALOG TITLE");
    
  2. Créer une méthode:

    public class ViewDialog {
    
      public void showDialog(Activity activity, String msg) {
    
        final Dialog dialog = new Dialog(activity);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.custom_dialoge_feedback);
    
        TextView text = (TextView) dialog.findViewById(R.id.text_dialog_feedback);
        text.setText(msg);
    
        Button okButton = (Button) dialog.findViewById(R.id.btn_dialog_feedback);
        Button cancleButton = (Button) dialog.findViewById(R.id.btn_dialog_cancle_feedback);
        final EditText edittext_tv = (EditText) dialog.findViewById(R.id.dialoge_alert_text_feedback);
    
        okButton.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                //Perfome Action
            }
        });
        cancleButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });
    
        dialog.show();
    
        }
    }
    
  3. Créez une mise en page XML que vous souhaitez ou dont vous avez besoin.

11
Jaydeep Dobariya

J'ai trouvé cela comme le moyen le plus simple d'afficher un dialogue personnalisé.

Vous avez la disposition your_layout.xml

public void showCustomDialog(final Context context) {
    Dialog dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.your_layout, null, false);
    findByIds(view);  /*HERE YOU CAN FIND YOU IDS AND SET TEXTS OR BUTTONS*/
    ((Activity) context).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
    dialog.setContentView(view);
    final Window window = dialog.getWindow();
    window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
    window.setBackgroundDrawableResource(R.color.colorTransparent);
    window.setGravity(Gravity.CENTER);
    dialog.show();
}
4
Khemraj

Vous pouvez essayer ce simple bibliothèque popup de dialogue Android pour couper le code de dialogue encombré. C'est très simple à utiliser pour votre activité. après cela, vous pouvez avoir ce code dans votre activité pour afficher le dialogue

Pop.on(this).with().title(R.string.title).layout(R.layout.custom_pop).show();

R.layout.custom_pop est votre mise en page personnalisée comme vous le souhaitez pour décorer votre boîte de dialogue.

4
Dharmesh Gohil

Créer un modèle d'alerte personnalisé custom_aler_update.xml

Puis copiez ce code dans Activité:

        AlertDialog basic_reg;
    AlertDialog.Builder builder ;
    builder = new AlertDialog.Builder(ct, R.style.AppCompatAlertDialogStyle);
    LayoutInflater inflater = ((Activity) ct).getLayoutInflater();
    View v = inflater.inflate(R.layout.custom_aler_update, null);
    builder.setView(v);
    builder.setCancelable(false);
    builder.create();
    basic_reg = builder.show();

Copiez ce code dans le style:

  <style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/colorAccent</item>
    <item name="Android:textColorPrimary">@color/primaryTextColor</item>
    <item name="Android:background">@color/white</item>
</style>
4
Ebin Joy

enter image description here

La capture d'écran ci-dessus est mon résultat.

Étapes:

  1. Besoin de créer XML. // design ui
  2. Besoin d'écrire une méthode. // définir les méthodes d'accès
  3. Appelez où vous voulez. // accès au rappel

Veuillez vous référer au lien indiqué pour la référence de code CustomDialogBox .

3
Agilanbu

Le moyen le plus simple de modifier la couleur d'arrière-plan et le style du texte consiste à créer un thème personnalisé pour la boîte de dialogue d'alerte Android comme ci-dessous: -

: Il suffit de mettre le code ci-dessous dans styles.xml:

    <style name="AlertDialogCustom" parent="@Android:style/Theme.Dialog">
    <item name="Android:textColor">#999999</item>
    <item name="Android:windowIsFloating">true</item>
    <item name="Android:windowContentOverlay">@null</item>
    <item name="Android:windowTitleStyle">@null</item>
    <item name="Android:typeface">monospace</item>
    <item name="Android:backgroundDimEnabled">false</item>
    <item name="Android:textSize">@dimen/abc_text_size_medium_material</item>
    <item name="Android:background">#80ff00ff</item>
</style>

: Maintenant que la personnalisation est faite, appliquez-la maintenant à votre objet alertBuilder:

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

J'espère que cela vous aidera !

3
Mahamadali

Créer une boîte de dialogue d'alerte quelque chose comme ça

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical" 
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <Button
        Android:id="@+id/btn"
        Android:layout_width="match_parent"
        Android:text="Custom Alert Dialog"
        Android:layout_height="40dp">
    </Button>
</LinearLayout>

et Ajouter le code ci-dessous sur votre classe d'activité

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LayoutInflater inflate = LayoutInflater.from(this);
    alertView = inflate.inflate(R.layout.your_alert_layout, null);
    Button btn= (Button) alertView.findViewById(R.id.btn);

    showDialog();
  }

 public void showDialog(){
        Dialog alertDialog = new Dialog(RecognizeConceptsActivity.this);
        alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        alertDialog.setContentView(alertView);
        alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        alertDialog.show();
    }
2

Fragment de boîte de dialogue est le moyen le plus simple de créer une boîte de dialogue d'alerte personnalisée. Suivez le code ci-dessus pour créer une vue personnalisée de votre boîte de dialogue, puis implémentez-la à l'aide de Fragment de boîte de dialogue. Ajoutez le code suivant à votre fichier de mise en page:

 <?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="80dp"
    Android:background="#3E80B4"
    Android:orientation="vertical">

    <TextView
        Android:id="@+id/txt_dia"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:layout_margin="10dp"
        Android:text="Do you realy want to exit ?"
        Android:textColor="@Android:color/white"
        Android:textSize="15dp"
        Android:textStyle="bold" />


    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:background="#3E80B4"
        Android:orientation="horizontal">

        <Button
            Android:id="@+id/btn_yes"
            Android:layout_width="100dp"
            Android:layout_height="30dp"
            Android:background="@Android:color/white"
            Android:clickable="true"
            Android:text="Yes"
            Android:textColor="#5DBCD2"
            Android:textStyle="bold" />

        <Button
            Android:id="@+id/btn_no"
            Android:layout_width="100dp"
            Android:layout_height="30dp"
            Android:layout_marginLeft="5dp"
            Android:background="@Android:color/white"
            Android:clickable="true"
            Android:text="No"
            Android:textColor="#5DBCD2"
            Android:textStyle="bold" />
    </LinearLayout>

</LinearLayout>
2
Madhav Bhattarai

C'est une classe de dialogue d'alerte pour que vous puissiez appeler la classe de n'importe quelle activité pour réutiliser le code.

public class MessageOkFragmentDialog extends DialogFragment {
Typeface Lato;
String message = " ";
String title = " ";
int messageID = 0;

public MessageOkFragmentDialog(String message, String title) {
    this.message = message;
    this.title = title;
}


@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

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

    LayoutInflater inflater = getActivity().getLayoutInflater();

    View convertview = inflater.inflate(R.layout.dialog_message_ok_box, null);


    Constants.overrideFonts(getActivity(), convertview);
    Lato = Typeface
            .createFromAsset(getActivity().getAssets(), "font/Lato-Regular.ttf");


    TextView textmessage = (TextView) convertview
            .findViewById(R.id.textView_dialog);

    TextView textview_dialog_title = (TextView) convertview.findViewById(R.id.textview_dialog_title);

    textmessage.setTypeface(Lato);
    textview_dialog_title.setTypeface(Lato);



    textmessage.setText(message);
    textview_dialog_title.setText(title);



    Button button_ok = (Button) convertview
            .findViewById(R.id.button_dialog);
    button_ok.setTypeface(Lato);

    builder.setView(convertview);
    button_ok.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            dismiss();

        }
    });


    return builder.create();

}
}

Le fichier XML pour le même est:

    <?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="match_parent"
    Android:background="#ffffff"
    Android:gravity="center_vertical|center"
    Android:orientation="vertical">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:gravity="center"
        Android:orientation="vertical">

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:background="@color/blue_color"
            Android:gravity="center_horizontal"
            Android:orientation="horizontal">

            <TextView
                Android:id="@+id/textview_dialog_title"
                Android:layout_width="wrap_content"
                Android:layout_height="50dp"
                Android:gravity="center"
                Android:textColor="@color/white_color"
                Android:textSize="@dimen/txtSize_Medium" />


        </LinearLayout>

        <View
            Android:layout_width="match_parent"
            Android:layout_height="1dp"
            Android:background="@color/txt_white_color" />

        <TextView
            Android:id="@+id/textView_dialog"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center"
            Android:layout_margin="@dimen/margin_20"
            Android:textColor="@color/txt_gray_color"
            Android:textSize="@dimen/txtSize_small" />

        <View
            Android:layout_width="match_parent"
            Android:layout_height="1dp"
            Android:background="@color/txt_white_color"
            Android:visibility="gone"/>

        <Button
            Android:id="@+id/button_dialog"
            Android:layout_width="wrap_content"
            Android:layout_height="@dimen/margin_40"
            Android:layout_gravity="center"
            Android:background="@drawable/circular_blue_button"

            Android:text="@string/ok"
            Android:layout_marginTop="5dp"
            Android:layout_marginBottom="@dimen/margin_10"
            Android:textColor="@color/txt_white_color"
            Android:textSize="@dimen/txtSize_small" />
    </LinearLayout>

</LinearLayout>
2
Pratibha Sarode

Créer un dialogue d'alerte personnalisé

cumstomDialog.xml

<ImageView
    Android:id="@+id/icon"
    Android:layout_width="50dp"
    Android:layout_height="50dp"
    Android:layout_gravity="center"
    Android:layout_margin="5dp"
    app:srcCompat="@drawable/error" />

<TextView
    Android:id="@+id/title"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:fontFamily="@font/muli_bold"
    Android:text="Title"
    Android:layout_marginTop="5dp"
    Android:textColor="@Android:color/black"
    Android:textSize="15sp" />


<TextView
    Android:id="@+id/description"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:layout_marginTop="10dp"
    Android:fontFamily="@font/muli_regular"
    Android:text="Message"
    Android:textColor="@Android:color/black"
    Android:textSize="12dp" />

<LinearLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center_horizontal"
    Android:layout_marginTop="20dp"
    Android:gravity="center"
    Android:orientation="horizontal">

    <Button
        Android:id="@+id/cancelBTN"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="left"
        Android:layout_margin="5dp"
        Android:background="@drawable/bground_radius_button_white"
        Android:text="No"
        Android:textColor="@color/black" />

    <Button
        Android:id="@+id/acceptBtn"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="right"
        Android:layout_margin="5dp"
        Android:background="@drawable/bground_radius_button"
        Android:text="Yes"
        Android:textColor="@color/white" />
</LinearLayout>

Affichez votre dialogue personnalisé sur votre activité:

  public void showDialog(String title, String des, int icon) {

    final Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.custom_dialog);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    Button cancelBTN = dialog.findViewById(R.id.cancelBTN);
    Button acceptBTN = dialog.findViewById(R.id.acceptBtn);
    TextView tvTitle = dialog.findViewById(R.id.title);
    TextView tvDescription = dialog.findViewById(R.id.description);
    ImageView ivIcon = dialog.findViewById(R.id.icon);

    tvTitle.setText(title);
    tvDescription.setText(des);
    ivIcon.setImageResource(icon);

    cancelBTN.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    acceptBTN.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    dialog.show();
}

Appelle comme ça:

showDialog ("Titre", "Message", R.drawable.warning);

1
idris yıldız

Je poste le code kotlin que j'utilise et cela fonctionne très bien pour moi. vous pouvez également définir un écouteur de clic pour les boutons de dialogue.

c'est mon code XML:

layout_custom_alert_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layoutDirection="ltr"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">

    <View
        Android:id="@+id/view6"
        Android:layout_width="match_parent"
        Android:layout_height="20dp"
        Android:background="@color/colorPrimary" />

    <androidx.constraintlayout.widget.ConstraintLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_below="@id/view6"
        Android:layout_marginStart="8dp"
        Android:layout_marginTop="8dp"
        Android:layout_marginEnd="8dp"
        Android:layout_marginBottom="8dp">


        <TextView
            Android:id="@+id/txt_alert_title"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_margin="8dp"
            Android:layout_marginStart="8dp"
            Android:layout_marginTop="8dp"
            Android:layout_marginEnd="8dp"
            tools:text="are you sure?"
            Android:textAlignment="center"
            Android:textColor="@Android:color/black"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />


        <Button
            Android:id="@+id/btn_alert_positive"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_below="@id/textView2"
            Android:layout_marginTop="8dp"
            Android:background="@Android:color/transparent"
            tools:text="yes"
            Android:textColor="@color/colorPrimaryDark"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/btn_alert_negative"
            app:layout_constraintTop_toBottomOf="@+id/txt_alert_title" />

        <Button
            Android:id="@+id/btn_alert_negative"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="8dp"
            Android:background="@Android:color/transparent"
            tools:text="no"
            Android:textColor="@color/colorPrimaryDark"
            app:layout_constraintEnd_toStartOf="@+id/btn_alert_positive"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/txt_alert_title" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout>

mAlertDialog.kt

class mAlertDialog(context: Context) {

    private val btn_positive : Button
    private val btn_negative : Button
    private val txt_alert_title : TextView
    private val dialog : AlertDialog
    init {
        val view = LayoutInflater.from(context).inflate(R.layout.layout_custom_alert_dialog,null)

        val dialog_builder = AlertDialog.Builder(context)
        dialog_builder.setView(view)

        btn_negative = view.findViewById(R.id.btn_alert_negative)
        btn_positive = view.findViewById(R.id.btn_alert_positive)
        txt_alert_title = view.findViewById(R.id.txt_alert_title)

        dialog = dialog_builder.create() 
    }

    fun show()
    {
        dialog.show()
    }

    fun setPositiveClickListener(listener :onClickListener)
    {
        btn_positive.setOnClickListener { v ->
            listener.onClick(btn_positive)
            dialog.dismiss()
        }
    }

    fun setNegativeClickListener(listener: onClickListener)
    {
        btn_negative.setOnClickListener { v ->
            listener.onClick(btn_negative)
            dialog.dismiss()
        }
    }

    fun setPoitiveButtonText(text : String)
    {
        btn_positive.text = text
    }


    fun setNegativeButtonText(text : String)
    {
        btn_negative.text = text
    }

    fun setAlertTitle(title : String)
    {
        txt_alert_title.text = title
    }
}

interface pour les écouteurs de clic:

onClickListener.kt

interface onClickListener{
    fun onClick(view : View)
}

Exemple d'utilisation

val dialog = mAlertDialog(context)
                dialog.setNegativeButtonText("no i dont")
                dialog.setPoitiveButtonText("yes is do")
                dialog.setAlertTitle("do you like this alert dialog?")

                dialog.setPositiveClickListener(object : onClickListener {
                    override fun onClick(view: View) {
                        Toast.makeText(context, "yes", Toast.LENGTH_SHORT).show()
                    }
                })

                dialog.setNegativeClickListener(object : onClickListener {
                    override fun onClick(view: View) {
                        Toast.makeText(context, "no", Toast.LENGTH_SHORT).show()
                    }
                })

                dialog.show()

J'espère que cela t'aidera!

0
H.sanati

Importer une alerte personnalisée:

        LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.dse_location_list_filter, null);
        final Dialog dialog = new Dialog(Acitvity_name.this);
        dialog.setContentView(view);
        dialog.setCancelable(true);
        dialog.setCanceledOnTouchOutside(true);
        dialog.show();
0
murugan mani

J'aime utiliser la bibliothèque tcAron. (Téléchargez ici: https://github.com/triocoder/tcAron )

  1. classe d'importation:

    import com.triocoder.tcaron.tcaronlibrary.tcAronDialogs;

  2. écrire cela:

    tcAronDialogs.showFancyAlert (MainActivity.this, false, "Texte", "Fermer", "ic_hub_white", 0xFFF44336);

  3. vérifier la documentation:
    https://github.com/triocoder/tcAron/wiki/showFancyAlert

0
JurijTSL