android dialog自定义圆角,Android自定义Dialog实现通用圆角对话框

前言:圆角对话框在项目中用的越来越多,之前一篇文章有介绍过使用系统的AlertDialog+CardView(Android中使用CardView实现圆角对话框)实现了圆角对话框的样式,今天介绍自定义Dialog实现通用的圆角对话框。

效果图:

b8b3fb993d4405bc9a37f9b39c8f8872.png

1.继承自AlertDialog,重写onCreat

/**

* Created by ruancw on 2018/6/7.

* 自定义的带圆角的对话框

*/

public class RoundCornerDialog extends AlertDialog{

private TextView tvTitle;

private TextView tvDes;

private TextView tvCancel;

private TextView tvConfirm;

//private Context context;

/**

* 一个参数的构造方法

* @param context 上下文对象

*/

public RoundCornerDialog(@NonNull Context context) {

super(context);

//this.context=context;

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.dialog_layout_test);

//设置背景透明,不然会出现白色直角问题

Window window = getWindow();

window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

setCanceledOnTouchOutside(false);

//初始化布局控件

initView();

//确定和取消按钮的事件监听

initEvent();

//设置参数必须在show之后,不然没有效果

WindowManager.LayoutParams params = getWindow().getAttributes();

getWindow().setAttributes(params);

}

}

注:解决白色直角的问题

(1)文中没有使用style设置背景透明,直接在代码中用的window.setBackgroundDrawable设置的背景透明,不然会出现遗留的四个角有白色直角的问题。

(2)当然也可以在构造方法中这样设置:super(context,R.style.CustomDialog)。

2.初始化布局

(1)布局文件(CradView实现圆角布局)

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="@dimen/dp_30"

app:cardCornerRadius="@dimen/dp_10">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@color/bg_mainWhite"

android:orientation="vertical">

android:id="@+id/tv_title"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:padding="@dimen/dp_10"

android:text="温馨提示"

android:textColor="@color/bg_mainWhite"

android:textSize="@dimen/sp_18" />

android:layout_width="match_parent"

android:layout_height="1dp"

android:background="@color/bg_line" />

android:id="@+id/tv_des"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:padding="@dimen/dp_20"

android:textSize="@dimen/sp_18" />

android:layout_width="match_parent"

android:layout_height="1dp"

android:background="@color/bg_line" />

android:layout_width="match_parent"

android:layout_height="@dimen/dp_48"

android:orientation="horizontal">

android:id="@+id/tv_cancel"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1.0"

android:gravity="center"

android:text="取消"

android:textSize="@dimen/sp_16" />

android:layout_width="1dp"

android:layout_height="match_parent"

android:background="@color/bg_line" />

android:id="@+id/tv_confirm"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1.0"

android:gravity="center"

android:text="确定"

android:textSize="@dimen/sp_16" />

(2)初始化布局文件及设置参数

/**

* 初始化布局文件及设置参数

*/

private void initView() {

//对话框标题

tvTitle=findViewById(R.id.tv_title);

//对话框描述信息

tvDes=findViewById(R.id.tv_des);

//确定按钮和取消

tvConfirm=findViewById(R.id.tv_confirm);

tvCancel=findViewById(R.id.tv_cancel);

}

(3)设置事件监听

让自定义的dialog实现OnClickListener接口,然后设置确定及取消按钮的事件监听

/**

* 确定及取消点击事件

*/

private void initEvent() {

tvConfirm.setOnClickListener(this);//确定

tvCancel.setOnClickListener(this);//取消@Override

public void onClick(View view) {

switch (view.getId()){

case R.id.tv_confirm:

dismiss();

break;

case R.id.tv_cancel:

dismiss();

break;

}

}

写到这里,圆角对话框就实现了,但如果另一个页面要求不同背景色,按钮的文本也不是“确定”和“取消”呢,我们是不是又的重写定义dialog和设置布局文件呢,显然这样很麻烦,貌似与我们的标题写的通用的圆角对话框也不相符啊,这似乎不太好吧。接下来,我们进行一番改造,打造通用的圆角对话框。

3.打造通用圆角对话框

(1)initView中设置初始参数

private String title="温馨提示",message,confirmText="确定",cancelText="取消";

//默认的标题栏背景色

private int titleColorBg=Color.parseColor("#FF8200");

//默认的确定和取消按钮背景色

private int confirmColorBg=Color.parseColor("#F8F8F8");

private int cancelColorBg=Color.parseColor("#F8F8F8");

/**

* 初始化布局文件及设置参数

*/

private void initView() {

//对话框标题

tvTitle=findViewById(R.id.tv_title);

//对话框描述信息

tvDes=findViewById(R.id.tv_des);

//确定按钮和取消

tvConfirm=findViewById(R.id.tv_confirm);

tvCancel=findViewById(R.id.tv_cancel);

/********************通用设置*********************/

//设置标题、描述及确定按钮的文本内容

tvTitle.setText(title);

tvDes.setText(message);

tvConfirm.setText(confirmText);

//设置标题栏及确定、取消按钮背景色

tvTitle.setBackgroundColor(titleColorBg);

tvConfirm.setBackgroundColor(confirmColorBg);

tvCancel.setBackgroundColor(cancelColorBg);

}

(2)定义设置属性方法

/**

* 设置标题栏文本

* @param title 标题

*/

public void setTitle(String title){

this.title=title;

}

/**

* 设置描述信息

* @param message 描述信息

*/

public void setMessage(String message){

this.message=message;

}

/**

* 设置确定按钮上的文本

* @param confirmText 文本

*/

public void setConfirmText(String confirmText){

this.confirmText=confirmText;

}

/**

* 设置取消按钮上的文本

* @param cancelText 文本

*/

public void setCancelText(String cancelText){

this.cancelText=cancelText;

}

/**

* 设置标题栏的背景

* @param titleColorBg 背景色int

*/

public void setTitleBg(int titleColorBg){

this.titleColorBg=titleColorBg;

}

/**

* 确定按钮背景色

* @param confirmColorBg int背景色

*/

public void setConfirmBg(int confirmColorBg){

this.confirmColorBg=confirmColorBg;

}

/**

* 取消按钮背景色

* @param cancelColorBg int背景色

*/

public void setCancelBg(int cancelColorBg){

this.cancelColorBg=cancelColorBg;

}

(3)定义接口,实现确定按钮的点击回调

private ConfirmListener confirmListener;

/**

* 设置确定按钮的监听

* @param confirmListener

*/

public void setConfirmListener(ConfirmListener confirmListener){

this.confirmListener=confirmListener;

}

/**

* 确定按钮点击的监听接口

*/

public interface ConfirmListener{

void onConfirmClick();

}

点击“确定”回调方法

case R.id.tv_confirm:

/************通用设置***********/

//点击确定按钮回调

confirmListener.onConfirmClick();

dismiss();

break;

一般点击“取消”按钮不做任何操作,只是关闭当前弹出的对话框,所以这里不做点击后回调,当然,点击“确定”后执行相关操作后也要关闭当前dialog。

4.使用

RoundCornerDialog roundCornerDialog=new RoundCornerDialog(mContext);

//设置标题,描述,文本等参数

roundCornerDialog.setTitle("温馨提示");

roundCornerDialog.setMessage("退出当前登录后将要重新登录!");

roundCornerDialog.setConfirmText("确认退出");

//确定按钮的点击回调方法

roundCornerDialog.setConfirmListener(new roundCornerDialog.ConfirmListener() {

@Override

public void onConfirmClick() {

Intent intent = new Intent(mContext, LoginActivity.class);

startActivity(intent);

UIUtil.toast("退出成功,请重新登录");

getActivity().finish();

}

});

//显示对话框

roundCornerDialog.show();

总结:本文通过自定义Dialog+CardView的方式实现了通用的圆角对话框效果,使用也相对简单,测试中发现在Android5.0以下设置标题栏背景色时,标题栏不会跟随CardView的圆角。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漫画:什么是囚徒困境?

戳蓝字“CSDN云计算”关注我们哦!作者 | 小灰责编 | 刘丹故事发生在小灰小时候......囚徒困境讲的是一件怎样的事情呢?话说某一天,警察抓到了嫌疑犯小A和小B,虽然明知道他们肯定是罪犯,却没有决定性的证据。于是警察想…

Dubbo Cloud Native 之路的实践与思考

摘要: Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注,尤其是 CNCF(Cloud Native Computing Foundation)项目蓬勃发展之际。Dubbo 作为服务治理的标志性项目,自然紧跟业界的潮流,拥抱技术的…

android mtk 按键,Android 4.0 虚拟按键、手机模式、平板模式(转)

nullem;text-align:left">平台信息:内核:linux2.6/linux3.0系统:android/android4.0平台:S5PV310(samsungExynos4210/4412)作者:xubin341719(欢迎转载,请注明作者) 三星新拿回来来的BSP,编译后没…

y电容如何选型_干式试验变压器选型依据

湖北中试高测电气控股有限公司为您解答:干式试验变压器选型依据干式试验变压器是电力系统中常用的设备之一,适用于各种电气设备绝缘性能的现场检测。当前市面上的干式试验变压器品牌、种类众多,如何才能选购到最适合自己使用的产品呢&#xf…

eplan如何导入access_EPLAN如何助力汽车行业的智能制造转型?

本文从汽车行业智能制造建设需求出发,结合EPLAN服务全球汽车行业企业实现智能制造的最佳实践,介绍了EPLAN在汽车行业智能制造建设过程中所能提供的完整、成熟的电气设计解决方案。作者:Eplan 王阳 | 来源:e-works一、汽车行业快速…

全面讲解OpenStack技术知识

戳蓝字“CSDN云计算”关注我们哦!作者 | 鲜枣课堂责编 | 刘丹对于大部分人来说,这是一个很陌生的词,不知道它到底是什么,从哪里来,有什么用,和自己的工作有什么关系。有人可能知道,它和现在非常…

Dubbo在互金行业的应用

摘要: 融之家技术团队从2015年截止到目前累计经历了4次演进(单体应用、多实例部署、半微服务、微服务),让平台能更懂用户,更理解用户的需求,把合适的人匹配到合适的产品。前言本文章是根据潘志伟老师在上海…

os是android5.0,Funtouch OS 2.1曝光 完美改Android5.0

由于设计风格华丽,UI特色鲜明,vivo基于Android 5.0开发的Funtouch OS 2.1曝光后,一直备受用户关注。近日,vivo官方再次公布其设计细节,据Funtouch官方微博发布的系统截图显示,Funtouch OS 2.1全面升级了And…

哈工大理论力学第八版电子版_校史上的这些天(37)| 和你一起在“岁月”中读懂哈工大...

1954年5月26日中央高等教育部委托哈工大组织举办理论力学、机械原理、机械零件3门课程教学座谈会。1990年5月26至27日哈尔滨建筑工程学院召开第六次党员代表大会。大会选举王玉林、朱华、刘剑秋、沈世钊、吴满山、张云学、张树仁、荣大成、高廷臣为中共哈尔滨建筑工程学院第六届…

fatal: remote origin already exists.报错已成功解决

在上传本地代码到github仓库时,出现下面这个问题: 解决办法: 先移除 git remote rm origin再次添加 git remote add origin https://github.com/jennaqin/jennaqin.github.io.git

阿里云 APM 解决方案地图

摘要: PM是近5年来伴随着云技术、微服务架构发展起来的一个新兴监控领域。在国内外,无论是云厂商(如AWS, Azure,等)还是独立的公司(Dynatrace, Appdynamics,等),都有着非常优秀的APM产品。APM 概述APM 全称是 Applicat…

云栖大会 | 释放计算弹性,阿里云做了很多

戳蓝字“CSDN云计算”关注我们哦!时至今日,已经没有人怀疑云计算是最主流的企业IT基础设施之一。围绕云计算最基础最核心的话题计算力,探讨在新硬件、新技术和新场景带来的机遇和挑战下,计算产品如何演进,使其价格更加…

支持Dubbo生态发展,阿里巴巴启动新的开源项目 Nacos

摘要: 上周六的Aliware技术行上海站Dubbo开发者沙龙上,阿里巴巴高级技术专家郭平(坤宇)宣布了阿里巴巴的一个新开源计划,阿里巴巴计划在7月份开启一个名叫Nacos的新开源项目, 在活动演讲中,坤宇介绍了这个开源项目的初衷&#xff…

地磅称重软件源码_电脑设备器件+塔吊主吊臂+撇渣管、丝杆+地磅称重传感器+极柱触头盒弯板+批式循环谷物干燥机+升降机标准节...

电脑设备器件 [1批]位置:广东省深圳市宝安区是否含税:不含税标的规格:批出险时间:2020-07-30 13:48:00受损原因:水湿深圳市益华市场受损程度:80%塔吊主吊臂 [1节]位置:广东省广州市番禺区是否含…

! [rejected]

git push -u origin master解决 git push -u -f origin master

laravel8找不到控制器_找一个“靠谱儿”的烟雾探测器方案,难不难?

安全,应该说是人们生活中最“硬核”的刚需。很多安全设备平日里几乎是“透明”的,大家感觉不到它们的存在,而一旦遇到事儿,它们却必须能够派上用场,颇有些“养兵千日,用兵一时”的味道。因此,如…

世界杯迄今最火的一场比赛 一文看懂世界杯背后的阿里云黑科技

摘要: 世界杯“法阿之战”中帕瓦尔世界波以及姆巴佩梅开二度一定让你印象深刻,而梅西的饮恨离开也让不少球迷碎了心。但你知道,比赛当天的阿里云藏着什么秘密吗?世界杯“法阿之战”中帕瓦尔世界波以及姆巴佩梅开二度一定让你印象深…

你在北边的西二旗被水淹没,我在东边的八通线不知所措

戳蓝字“CSDN云计算”关注我们哦!作者 | 朱小五and王小九责编 | 刘丹当代大城市年轻人,生活扇来的第一个巴掌就是——租房。而大部分年轻人在租房的第一年,要么付了大公司的服务费,要么交了黑中介的智商税。在积累了一定被坑的经验…

【免费公测中】为数据赋予超能力,阿里云重磅推出Serverless数据分析引擎-Data Lake Analytics

摘要: 近日,阿里云重磅推出Serverless数据分析引擎-Data Lake Analytics,Data Lake Analytics,帮助更多不具备分析能力的存储服务,赋予其分析的能力。近日,阿里云重磅推出Serverless数据分析引擎-Data Lake…