【Android】Android通用交互对话框——自定义Dialog(复制粘贴即可)

布满荆棘的人生 2021-09-30 06:20 588阅读 0赞

项目中,几乎是百分之百会用到对话框,比如

“确定要删除吗?” ——确定,取消
“确定要进行此操作吗?” ——确定,取消
“确定要xxx”,——确定,取消
“对不起,不能进行此操作”,——确定
“系统故障”,——确定
“操作成功”,——确定

诸如此类。一种是有确定、取消按钮,一种是只有一个确定按钮。

Android SDK提供的对话框样式比较固定。实际项目中一般需要我们自定义。下面提供了一种简洁可复用的自定义对话框。

下面提供一种通用的对话框代码,只要稍微改一下样式即可。

以下代码直接复制到项目中即可。

  1. import android.app.Dialog;
  2. import android.content.Context;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.ImageButton;
  7. import android.widget.TextView;
  8. /** * create by devnn on 2019-07-25 */
  9. public class ConfirmDialog extends Dialog implements View.OnClickListener{
  10. private ImageButton imgClose;//右上角,关闭图标
  11. private Button btnConfirm;//确认按钮
  12. private Button btnCancel;//取消按钮
  13. private TextView tvMessage;//要显示的消息
  14. private ConfirmListener confirmListener;//确认按钮的回调
  15. private boolean showCancelButton;//是否需要显示取消按钮
  16. public ConfirmDialog(Context context,boolean showCancelButton) {
  17. super(context);
  18. this.showCancelButton=showCancelButton;
  19. }
  20. //监听器,需要你的Activity实现它
  21. public interface ConfirmListener{
  22. void onConfirm();
  23. void onCancel();
  24. }
  25. /** * 设置"确定"按钮的监听 * @param confirmListener */
  26. public void setConfirmListener(ConfirmListener confirmListener) {
  27. this.confirmListener = confirmListener;
  28. }
  29. /** * 设置要显示的文字,比如"确定要删除吗?" * @param message */
  30. public void setMessage(String message) {
  31. if (tvMessage != null) {
  32. tvMessage.setText(message);
  33. }
  34. }
  35. @Override
  36. protected void onCreate(Bundle savedInstanceState) {
  37. super.onCreate(savedInstanceState);
  38. this.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
  39. setContentView(R.layout.layout_dialog_confirm);
  40. imgClose=findViewById(R.id.dialog_close);
  41. btnConfirm=findViewById(R.id.dialog_confirm);
  42. btnConfirm.setOnClickListener(this);
  43. btnCancel=findViewById(R.id.dialog_cancel);
  44. btnCancel.setOnClickListener(this);
  45. if(showCancelButton){
  46. btnCancel.setVisibility(View.VISIBLE);
  47. }else{
  48. btnCancel.setVisibility(View.GONE);
  49. }
  50. tvMessage=findViewById(R.id.dialog_message);
  51. imgClose.setOnClickListener(this);
  52. }
  53. @Override
  54. public void onClick(View v) {
  55. if(v.equals(this.imgClose)){
  56. dismiss();
  57. }else if(v.equals(this.btnConfirm)){
  58. if(confirmListener!=null){
  59. confirmListener.onConfirm();
  60. }
  61. dismiss();
  62. }else if(v.equals(this.btnCancel)){
  63. if(confirmListener!=null){
  64. confirmListener.onCancel();
  65. }
  66. dismiss();
  67. }
  68. }
  69. }

下面是布局文件layout_dialog_confirm.xml,按照UI的要求稍微修改一下样式即可。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="260dp" android:layout_height="wrap_content" android:background="circle_background"> <!--可设置圆角背景-->
  3. <ImageButton android:id="@+id/dialog_close" android:layout_width="20dp" android:layout_height="20dp" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_marginTop="10dp" android:layout_marginRight="5dp" android:contentDescription="@string/logo" android:visibility="visible" />
  4. <TextView android:id="@+id/dialog_message" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/dialog_close" android:layout_marginLeft="20dp" android:lineSpacingMultiplier="1.2" android:layout_marginTop="10dp" android:textSize="14sp" android:layout_marginRight="20dp" android:text="..." android:textColor="#333333" />
  5. <LinearLayout android:layout_width="200dp" android:layout_height="56dp" android:layout_below="@+id/dialog_message" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:orientation="horizontal">
  6. <Button android:id="@+id/dialog_confirm" style="?attr/button_style" android:layout_width="0dp" android:layout_height="36dp" android:layout_weight="1" android:text="@string/dialog_confirm" />
  7. <Button android:id="@+id/dialog_cancel" style="?attr/button_style" android:layout_width="0dp" android:layout_height="36dp" android:layout_marginLeft="20dp" android:visibility="gone" android:layout_weight="1" android:text="@string/dialog_cancel" />
  8. </LinearLayout>
  9. </RelativeLayout>

显示对话框代码示例:

  1. //第二次参数表示是否要显示取消按钮true显示false不显示
  2. ConfirmDialog confirmDialog = new ConfirmDialog(this, true);
  3. confirmDialog.setConfirmListener(new ConfirmDialog.ConfirmListener() {
  4. @Override
  5. public void onConfirm() {
  6. //处理确定回调
  7. }
  8. @Override
  9. public void onCancel() {
  10. //处理取消回调
  11. }
  12. });
  13. confirmDialog.show();
  14. confirmDialog.setMessage("确定要删除吗?");

发表评论

表情:
评论列表 (有 0 条评论,588人围观)

还没有评论,来说两句吧...

相关阅读

    相关 定义Dialog

    > 由于项目中需要用到自定义Dialog,所以学习了一下。 首先我们来个自定义主题 基本上市面上大多数自定义Dialog,大多数都是这个主题 <style n