How to create a Custom Dialog box in android?
我想创建一个自定义对话框,如下所示
我尝试过以下的事情。
我创建了AlertDialog.Builder的子类,并使用了自定义标题和自定义内容视图并使用了它,但结果并不像预期的那样。
另一种尝试是继承DialogFragment并在onCreateDialog中自定义对话框,但结果不是预期的。
然后我尝试使用普通的Dialog类。结果并不像预期的那样。
在所有三种情况下,问题是当我忽略标题视图时,对话框的大小不是预期的,当我使用标题视图时,结果是内容视图周围有一个粗边框(实际上看起来很糟糕)。现在我脑子里有两个问题......
我怎样才能做到这一点?由于我已经尝试了很多东西,因此我们将更加赞赏直接的答案。
在Android应用程序中显示错误或警告对话框的最佳方法是什么?
编辑
Android Developer Documentation建议我们使用DialogFragments或Dialogs向用户显示错误/警报消息。但有一次他们说......
Tip: If you want a custom dialog, you can instead display an Activity as a dialog instead of using the Dialog APIs. Simply create an activity and set its theme to Theme.Holo.Dialog in the manifest element.
那是什么意思?使用Activity只是为了显示错误消息是不是太多了?
在这里,我创建了一个简单的Dialog,如:
custom_dialog.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <?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> |
你必须
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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(); } } |
如何拨打电话?
1 2 3 | R.id.TXT_Exit: CustomDialogClass cdd=new CustomDialogClass(Values.this); cdd.show(); |
更新
很长一段时间后,我的一个朋友让我做了一个透明背景的弯曲形状对话框。所以,我在这里实现了它。
要制作弯曲的形状,您需要创建一个单独的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <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> |
现在,在主视图布局中添加此
1 2 3 4 5 6 7 | <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> |
怎么称呼这个?
1 2 3 | CustomDialogClass cdd = new CustomDialogClass(MainActivity.this); cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); cdd.show(); |
我希望这对你有用。
这是一个示例对话框,使用xml创建。
下一个代码xml只是一个例子,设计或视图在这里实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <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> |
这行代码是drawable的资源:
1 2 | android:src="@drawable/dialog_cross" android:background="@drawable/btn_flat_red_selector" |
你可以做一个类扩展Dialog,也是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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(); } } |
最后是你的Activity上的调用形式,例如:
1 2 | ViewDialog alert = new ViewDialog(); alert.showDialog(getActivity(),"Error de conexión al servidor"); |
我希望它为你工作。
另一种简单的方法。
步骤1)创建一个具有正确id的布局。
步骤2)在任何您想要的地方使用以下代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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(); |
在
1 2 3 4 | <style name="Theme_Dialog" parent="android:Theme.Light"> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> </style> |
在
1 | Dialog dialog = new Dialog(FlightBookActivity.this,R.style.Theme_Dialog); |
在xml文件中定义包含标题栏的对话框布局,并将xml文件设置为:
1 | dialog.setContentView(R.layout.your_dialog_layout); |
简单首先创建一个类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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(); } } |
然后创建custom_dialogbox_otp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | <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> |
然后在你的drawable创建xml文件下面。
对于round_layout_white_otp.xml
1 2 3 4 5 6 7 8 9 10 11 | <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> |
对于round_layout_otp.xml
1 2 3 4 5 6 7 8 9 10 11 | <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
1 2 3 4 5 6 7 8 9 10 11 | <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> |
然后最后使用下面的代码来视觉对话:)
1 2 | ViewDialog alert = new ViewDialog(); alert.showDialog(ReceivingOTPRegActivity.this,"OTP has been sent to your Mail"); |
你的输出:)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 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(); } }); } |
创建自定义对话框的最简单方法:
初始化并显示对话框:
1 2 | ViewDialog alertDialoge = new ViewDialog(); alertDialoge.showDialog(getActivity(),"PUT DIALOG TITLE"); |
创建方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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(); } } |
创建您想要或需要的布局XML。
我发现这是显示自定义对话框的最简单方法。
你有布局
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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(); } |
您可以尝试这个简单的android对话框弹出库来剪切混乱的对话框代码。在您的活动中使用非常简单。
之后,您可以在活动中显示此代码以显示对话框
1 | Pop.on(this).with().title(R.string.title).layout(R.layout.custom_pop).show(); |
其中R.layout.custom_pop是您想要装饰对话框的自定义布局。
创建自定义警报布局custom_aler_update.xml
然后将此代码复制到Activity:
1 2 3 4 5 6 7 8 9 | 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(); |
将此代码复制到样式:
1 2 3 4 5 | <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> |
更改背景颜色和文本样式的最简单方法是为Android警报对话框创建自定义主题,如下所示: -
:只需将下面的代码放到styles.xml:
1 2 3 4 5 6 7 8 9 10 | <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> |
:现在自定义事情已经完成,现在只适用于您的alertBuilder对象:
1 | AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this,R.style.AlertDialogCustom); |
希望对你有帮助 !
上面的截图是我的结果。
脚步 :
请参考给定的链接以获取代码参考CustomDialogBox。
创建警报对话框布局是这样的
1 2 3 4 5 6 7 8 9 10 11 12 | <?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> |
并在Activity类上添加以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @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(); } |
它是Alert Dialog的一个类,因此您可以从任何活动调用该类来重用代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 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(); } } |
同样的Xml文件是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <?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> |
Dialog Fragment是创建自定义Alert Dialog的最简单方法。按照上面的代码为对话框创建自定义视图,然后使用Dialog Fragment实现它。将以下代码添加到布局文件中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <?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> |
创建自定义警报对话框
cumstomDialog.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <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> |
在您的活动中显示自定义对话框:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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(); } |
像这样打电话:
showDialog("Title","Message",R.drawable.warning);
我喜欢使用tcAron库。
(点击此处下载:https://github.com/triocoder/tcAron)
进口类:
import com.triocoder.tcaron.tcaronlibrary.tcAronDialogs;
写这个:
tcAronDialogs.showFancyAlert(MainActivity.this,false,"Text","Close","ic_hub_white",0xFFF44336);
检查文档:
https://github.com/triocoder/tcAron/wiki/showFancyAlert
我发布了我正在使用的kotlin代码,它对我来说很好。您还可以为对话框按钮设置单击侦听器。
这是我的XML代码:
layout_custom_alert_dialog.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 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 } } |
点击侦听器的界面:
onClickListener.kt
1 2 3 | interface onClickListener{ fun onClick(view : View) } |
样本用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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() |
我希望这能帮到您!
导入自定义提醒:
1 2 3 4 5 6 7 | 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(); |