Je veux créer une boîte de dialogue personnalisée comme ci-dessous
J'ai essayé les choses suivantes.
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.
Une autre tentative consistait à sous-classer DialogFragment et à personnaliser le dialogue dans onCreateDialog, mais que le résultat n'était pas comme prévu.
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 ...
Comment puis-je y arriver? Comme j'ai déjà essayé beaucoup de choses, une réponse directe sera plus appréciée.
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 ???
Ici, j'ai créé un dialogue simple, comme:
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();
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.
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.
Ceci est un exemple de dialogue, créer avec XML.
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.
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();
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);
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:)
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();
}
});
}
Le moyen le plus simple de créer une boîte de dialogue personnalisée:
Initialiser et afficher le dialogue:
ViewDialog alertDialoge = new ViewDialog();
alertDialoge.showDialog(getActivity(), "PUT DIALOG TITLE");
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();
}
}
Créez une mise en page XML que vous souhaitez ou dont vous avez besoin.
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();
}
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();
où R.layout.custom_pop est votre mise en page personnalisée comme vous le souhaitez pour décorer votre boîte de dialogue.
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>
La capture d'écran ci-dessus est mon résultat.
Étapes:
Veuillez vous référer au lien indiqué pour la référence de code CustomDialogBox .
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 !
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();
}
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>
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>
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);
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!
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();
J'aime utiliser la bibliothèque tcAron. (Téléchargez ici: https://github.com/triocoder/tcAron )
classe d'importation:
import com.triocoder.tcaron.tcaronlibrary.tcAronDialogs;
écrire cela:
tcAronDialogs.showFancyAlert (MainActivity.this, false, "Texte", "Fermer", "ic_hub_white", 0xFFF44336);
vérifier la documentation:
https://github.com/triocoder/tcAron/wiki/showFancyAlert