Android 自定义 Style 实现一个简洁、美观、通用 Dialog

 0

 358

另一棵树

2019/7/30 23:12:44

效果图

img[/layedit/img/201907302310083497.gif]

实现步骤

首先,我给它设定了一个风格,也就是对我们对话框一些必要属性的设置,它是一个style资源文件,如下

[pre]

@android:color/transparent

true

@null

true

false

[/pre]

其次,我们对它的xml布局文件进行绑定,下边是我们布局代码

[pre]

android:layout_width="match_parent"

android:layout_height="match_parent"

xmlns:tools="http://schemas.android.com/tools"

android:background="#11ffffff">

android:layout_width="260dp"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:background="@drawable/usual_dialog_shape"

android:orientation="vertical">

android:id="@+id/tv_title"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_margin="15dp"

android:gravity="center"

tools:text="消息提示"

android:textColor="#38ADFF"

android:textSize="16sp" />

android:id="@+id/tv_message"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="20dp"

android:layout_marginRight="20dp"

tools:text="提示消息" />

android:layout_width="match_parent"

android:layout_height="1px"

android:layout_marginTop="15dp"

android:background="#E4E4E4" />

android:layout_width="match_parent"

android:layout_height="40dp"

android:orientation="horizontal">

android:id="@+id/btn_cancel"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_marginLeft="10dp"

android:layout_weight="1"

android:background="@null"

android:gravity="center"

android:singleLine="true"

tools:text="No"

android:textColor="#7D7D7D"

android:textSize="16sp"

tools:ignore="RtlHardcoded" />

android:layout_width="1px"

android:layout_height="match_parent"

android:background="#E4E4E4" />

android:id="@+id/btn_confirm"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_marginRight="10dp"

android:layout_weight="1"

android:background="@null"

android:gravity="center"

android:singleLine="true"

tools:text="Yes"

android:textColor="#38ADFF"

android:textSize="16sp"

tools:ignore="RtlHardcoded" />

[/pre]

最后,我们继承系统的Dialog,进行设置一些必要的style、点击事件等。我们在构造器里传入我们刚刚新建的style主题,这个设置很重要。然后我个人用了建造者模式对Dialog类进行了封装

Dialog类代码

[pre]

/**

* 通常都会使用的一种交互对话框

*

* @Created by Mr.Xu on 2018/4/30.

*/

public class UsualDialogger extends Dialog {

private final String TITLE;

private final String MESSAGE;

private final String CONFIRMTEXT;

private final String CANCELTEXT;

private final onConfirmClickListener ONCONFIRMCLICKLISTENER;

private final onCancelClickListener ONCANCELCLICKLISTENER;

public interface onConfirmClickListener {

void onClick(View view);

}

public interface onCancelClickListener {

void onClick(View view);

}

private UsualDialogger(@NonNull Context context, String title, String message, String confirmText, String cancelText,

onConfirmClickListener onConfirmClickListener, onCancelClickListener onCancelClickListener) {

super(context, R.style.MyUsualDialog);

this.TITLE = title;

this.MESSAGE = message;

this.CONFIRMTEXT = confirmText;

this.CANCELTEXT = cancelText;

this.ONCONFIRMCLICKLISTENER = onConfirmClickListener;

this.ONCANCELCLICKLISTENER = onCancelClickListener;

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.usual_dialog);

setCanceledOnTouchOutside(false);

initView();

}

public static Builder Builder(Context context) {

return new Builder(context);

}

private void initView() {

Button btnConfirm = findViewById(R.id.btn_confirm);

Button btnCancel = findViewById(R.id.btn_cancel);

TextView tvTitle = findViewById(R.id.tv_title);

TextView tvMessage = findViewById(R.id.tv_message);

if (!TextUtils.isEmpty(TITLE)) {

tvTitle.setText(TITLE);

}

if (!TextUtils.isEmpty(MESSAGE)) {

tvMessage.setText(MESSAGE);

}

if (!TextUtils.isEmpty(CONFIRMTEXT)) {

btnConfirm.setText(CONFIRMTEXT);

}

if (!TextUtils.isEmpty(CANCELTEXT)) {

btnCancel.setText(CANCELTEXT);

}

btnConfirm.setOnClickListener(view -> {

if (ONCONFIRMCLICKLISTENER == null) {

throw new NullPointerException("clicklistener is not null");

} else {

ONCONFIRMCLICKLISTENER.onClick(view);

}

});

btnCancel.setOnClickListener(view -> {

if (ONCANCELCLICKLISTENER == null) {

throw new NullPointerException("clicklistener is not null");

} else {

ONCANCELCLICKLISTENER.onClick(view);

}

});

}

public UsualDialogger shown() {

show();

return this;

}

public static class Builder {

private String mTitle;

private String mMessage;

private String mConfirmText;

private String mCancelText;

private onConfirmClickListener mOnConfirmClickListener;

private onCancelClickListener mOnCcancelClickListener;

private Context mContext;

private Builder(Context context) {

this.mContext = context;

}

public Builder setTitle(String title) {

this.mTitle = title;

return this;

}

public Builder setMessage(String message) {

this.mMessage = message;

return this;

}

public Builder setOnConfirmClickListener(String confirmText, onConfirmClickListener confirmclickListener) {

this.mConfirmText = confirmText;

this.mOnConfirmClickListener = confirmclickListener;

return this;

}

public Builder setOnCancelClickListener(String cancelText, onCancelClickListener onCancelclickListener) {

this.mCancelText = cancelText;

this.mOnCcancelClickListener = onCancelclickListener;

return this;

}

public UsualDialogger build() {

return new UsualDialogger(mContext, mTitle, mMessage, mConfirmText, mCancelText,

mOnConfirmClickListener, mOnCcancelClickListener);

}

}

}

[/pre]

MainActivity代码

[pre]

public class MainActivity extends AppCompatActivity {

@BindView(R.id.btn_Dialog_Usual)

Button btnDialogUsual;

private UsualDialogger dialog2 = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ButterKnife.bind(this);

}

/**

* 通用的确定和取消对话框

*/

@OnClick(R.id.btn_Dialog_Usual)

public void showUsualDialog() {

dialog2 = UsualDialogger.Builder(this)

.setTitle("通用对话框")

.setMessage("这是一个漂亮的对话框")

.setOnConfirmClickListener("确定", view -> {

Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show();

})

.setOnCancelClickListener("取消", view -> {

Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();

if (dialog2 != null) {

dialog2.dismiss();

}

})

.build()

.shown();

}

}

[/pre]

android自定义dialog style,Android 自定义 Style 实现一个简洁、美观、通用 Dialog相关推荐

  1. imos style android,自定义的第一个view

    可以实现 动态 添加 view 并且 能获取 添加的view 所绑定的数据 package app.imos.imosapp.views; import android.content.Context ...

  2. android自定义dialog 例子,android dialog自定义实例详解

    本人工作有一个月多了.对于android很多东西,都有了新的了解或者说真正的掌握.为了让更多的像我这样的小白少走弯路,所以我会坚持将我在工作中遇到的一些比较令我印象深刻的知识点整合出来给大家(顺序是按 ...

  3. android自定义透明圆形,Android progressdialog自定义背景透明的圆形进度条类似于Dialog...

    很高兴能为大家分享一个背景是透明的圆形进度,先开效果图 效果图如下: 效果图 实现方法如下: 首先准备自己要定义成哪样子的效果的图片. 圆形进度条 1.创建Dialog的代码,你可以自己封装成一个方法 ...

  4. android常用窗口动画,android 自定义dialog,窗口动画,

    自定义dialog窗口,根据坐标可随意设置dialog显示位置,实现了窗口弹出动画 Java代码: package com.sunxu.org.IndividualityDialog; import ...

  5. android 自定义dialog样式,Android 自定义dialog类

    首先定制style样式 styles.xml 加入自定义样式 @null true true true @color/transparent @color/transparent true 0.6 在 ...

  6. Android带参数回传的自定义dialog

    Android带参数回传的自定义dialog 1.首先,建立一个属于dialog的style样式: <style name="MessageListDialog" paren ...

  7. android dialog 字体,android – 为AlertDialog的MultiSelectItems设置自定义字体(字体)

    AlertDialog.Builder使用 AlertController.AlertParams构建对话框.我检查了AlertDialog.Builder #create()调用AlertContr ...

  8. android 获取对话框对象,Android 基本Dialog和自定义Dialog

    Android 基本Dialog和自定义Dialog Dialog类是对话框的基类,但你应该避免直接实例化Dialog ,可以使用子类 1.AlertDialog 此对话框可以显示标题,最多三个按钮, ...

  9. android自定义退出对话框,Android自定义Dialog(仿QQ同步助手退出对话框)

    继承Dialog类就可以了,写写布局文件,写写style,就OK了.下面开始. 先上布局文件: xmlns:android="http://schemas.android.com/apk/r ...

最新文章

  1. VS2019使用说明
  2. VRRP协议介绍--转
  3. C运算符解析及优先级
  4. java连接数据库代码写在哪里,jdbc连接数据库怎么做的。代码写哪里呀 求大神
  5. 阿里程序员转行公务员,工资少了40万,只留一句话惊醒众人
  6. android 华为手机灭屏搜索不到蓝牙_华为Mate 30更新EMUI10.1.0.132版本,新增10项实用功能...
  7. 使用ARGV在命令行里接收参数
  8. 数据结构与算法之美学习笔记:哈希算法-哈希算法在分布式系统中有哪些应用(第22讲)...
  9. cnc加工中心保养表_CNC加工中心常用指令以及保养项目
  10. 天猫订单详情页应该如何查看呢?
  11. VR眼镜连接android设备,华为VR眼镜连接电脑教程
  12. git启动linux系统,gitlab 开机自动启动配置
  13. 一起学英语 - 前言
  14. hr常见面试题及答案
  15. 啊哈添柴挑战Java1221. 输出三角形
  16. 兄弟选择器——用于选择除第一个元素外的其他兄弟元素
  17. JDK的解压安装 - CentOS(结尾附视频)
  18. Android自定义View分享——仿微信朋友圈图片合并效果
  19. LED音乐频谱之输入数据处理
  20. 【Flutter】入门07-Row、Column与其主轴、交叉轴

热门文章

  1. 【游戏开发引擎】实验4:Gauntlet Runner 3D 赛跑游戏
  2. 艺术探索笔记:IPC
  3. jsp----前后端分离---框架---web应用的构建
  4. 01_11_Java语言入门||02_面向对象与常用类||day11_final、权限、内部类、成员变量类型和方法的参数及返回值特例
  5. Excel根据身份证号批量计算年龄+
  6. PHP-MySQL停车场车位管理系统(附源码
  7. ug编程好还是Powermill?
  8. Matlab小波去噪——基于wden函数的去噪分析
  9. 火力全开 思科FirePOWER下一代防火墙
  10. Android | Activity 启动流程分析