原文:Android项目实战(三十二):圆角对话框Dialog

前言:

  项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框。

  

  对话框包括:1、圆角

        2、app图标 , 提示文本,关闭对话框的"确定"按钮

  难点:1、对话框边框圆角显示

     2、考虑到提示文本字数不确定,在不影响美观的情况下,需要在一行内显示提示的文字信息

       3、设置对话框的宽和高

  技术储备:

     1、安卓开发_使用AlertDialog实现对话框    知道AlertDialog有setView(view) ,Dialog 有ContentView(view) 方法。

     2、Android项目实战(五):TextView自适应大小   一行内显示文本信息,当文本字数少的时候 ,文字大小大,当文本字数多的时候,文字大小小。   

    

--------------------------------------------------------------------------------------------------------------------

1、布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"xmlns:autofit="http://schemas.android.com/apk/res-auto"android:layout_height="wrap_content"android:background="@drawable/dialog_corner_bg"android:paddingBottom="@dimen/dp_16"><ImageViewandroid:id="@+id/dialog_img"android:layout_width="30dp"android:layout_height="30dp"android:src="@mipmap/icon1"android:layout_marginTop="@dimen/dp_12"android:layout_centerHorizontal="true"/><me.grantland.widget.AutofitTextViewandroid:id="@+id/dialog_txt_content"android:layout_width="match_parent"android:layout_height="wrap_content"android:singleLine="true"android:maxLines="1"android:textSize="14sp"autofit:minTextSize="10sp"android:text="下载失败,请重试"android:gravity="center"android:layout_margin="@dimen/dp_6"android:layout_centerInParent="true"/><TextViewandroid:id="@+id/dialog_btn_comfirm"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="确定"android:gravity="center"android:background="@drawable/bg_btn_blue_big"android:textColor="@color/white"android:paddingTop="@dimen/dp_6"android:paddingBottom="@dimen/dp_6"android:paddingLeft="@dimen/dp_30"android:paddingRight="@dimen/dp_30"android:layout_centerHorizontal="true"android:layout_alignParentBottom="true"/></RelativeLayout>

dialog_message.xml

其中根容器用到

   android:background="@drawable/dialog_corner_bg"

这是shape来设置 边缘圆角

<?xml version="1.0" encoding="utf-8"?>
<!-- 用于设置信息对话框的圆角 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"><corners android:radius="@dimen/dp_12"></corners><solid android:color="@color/white"></solid>
</shape>

2、从上面可以看到设置对话框的圆角只需要一个 drawable文件,shape设置 corners属性即可。

  也许大家从别的文章发现, 有的人用圆角背景图片来实现对话框圆角,有的人用style来实现对话框圆角。

  经过我1个多小时的折腾,发现这些方法都不可靠,其实很简单,以上方法用的是AlertDialog , 但是我们这里用的Dialog类,一个shape 足矣。

  因为项目中必定多出用到对话框,所以我写一个静态方法,传上下文参数 和 提示文本的内容即可 :

public static void showEditDialog(Context context , String message) {}

  

  1、初始化对话框相关操作:

     View view = LayoutInflater.from(context).inflate(R.layout.dialog_message, null);TextView confirm;    //确定按钮final TextView content;    //内容confirm = (TextView) view.findViewById(R.id.dialog_btn_comfirm); content = (TextView) view.findViewById(R.id.dialog_txt_content);content.setText(message);final Dialog dialog = new Dialog(context);dialog.setContentView(view);dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);  //设置对话框背景透明 ,对于AlertDialog 就不管用了

  

  2、设置"确定"按钮的点击事件

    confirm.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dialog.dismiss();}});

  3、显示对话框

dialog.show();

  

  4、设置对话框的宽度和高度

    DisplayMetrics dm = context.getResources().getDisplayMetrics();int displayWidth = dm.widthPixels;int displayHeight = dm.heightPixels;android.view.WindowManager.LayoutParams p = dialog.getWindow().getAttributes();  //获取对话框当前的参数值p.width = (int) (displayWidth * 0.55);    //宽度设置为屏幕的0.55p.height = (int) (displayHeight * 0.28);    //高度设置为屏幕的0.28dialog.setCanceledOnTouchOutside(false);// 设置点击屏幕Dialog不消失dialog.getWindow().setAttributes(p);     //设置生效

  注意:这里就是用屏幕的宽高比例来设置对话框的宽高比例。

  还有一个做法:

AlertDialog dialog = builder.create();
dialog.setView(view);
dialog.show();
WindowManager m = getWindowManager();    //这里会发现不在activity中的话  就没法调用getWindowManager()方法,所以此方法不能使用
Display d = m.getDefaultDisplay();  //为获取屏幕宽、高
android.view.WindowManager.LayoutParams p = dialog.getWindow().getAttributes();  //获取对话框当前的参数值
p.height = (int) (d.getHeight() * 0.3);   //高度设置为屏幕的0.3
p.width = (int) (d.getWidth() * 0.5);    //宽度设置为屏幕的0.5
dialog.getWindow().setAttributes(p);     //设置生效  

附提示文本多的时候的对话框界面:

完整代码:

 

  /*----------------------------dialog---------------------------------*/public static void showEditDialog(Context context , String message) {View view = LayoutInflater.from(context).inflate(R.layout.dialog_message, null);TextView confirm;    //确定按钮final TextView content;    //内容confirm = (TextView) view.findViewById(R.id.dialog_btn_comfirm);content = (TextView) view.findViewById(R.id.dialog_txt_content);content.setText(message);final Dialog dialog = new Dialog(context);dialog.setContentView(view);dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);confirm.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dialog.dismiss();}});dialog.show();DisplayMetrics dm = context.getResources().getDisplayMetrics();int displayWidth = dm.widthPixels;int displayHeight = dm.heightPixels;android.view.WindowManager.LayoutParams p = dialog.getWindow().getAttributes();  //获取对话框当前的参数值p.width = (int) (displayWidth * 0.55);    //宽度设置为屏幕的0.5p.height = (int) (displayHeight * 0.28);    //宽度设置为屏幕的0.5dialog.setCanceledOnTouchOutside(false);// 设置点击屏幕Dialog不消失dialog.getWindow().setAttributes(p);     //设置生效
}

--------------------------------------------------------------------------------------------------------

本人目前单挑两个APP,负责leancloud云端开发,同学们可关注我这个小程序员,有问题互相帮忙解决。

 

Android项目实战(三十二):圆角对话框Dialog相关推荐

  1. OpenCV C++案例实战三十二《字符识别》

    OpenCV C++案例实战三十二<字符识别> 前言 一.结果演示 二.制作数据集 三.字符识别 四.源码 总结 前言 本案例将使用OpenCV C++ 进行字符识别.主要包括制作数据集. ...

  2. Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)

    http://www.xuanyusong.com/archives/831 http://www.xuanyusong.com/archives/1454 如果大家对Unity中如何使用数据库还不是 ...

  3. Android项目实战(十六):QQ空间实现(一)—— 展示说说中的评论内容并有相应点击事件...

    大家都玩QQ空间客户端,对于每一个说说,我们都可以评论,那么,对于某一条评论: 白雪公主 回复 小矮人 : 你们好啊~ 我们来分析一下: 1.QQ空间允许我们 点击 回复人和被回复人的名字就可以进入对 ...

  4. 潭州课堂25班:Ph201805201 django 项目 第三十二课 后台站点管理(课堂笔记)

    一.后台站点模版抽取 1.获取静态站点模版 可以使用git clone到本地 git clone https://github.com/almasaeed2010/AdminLTE.git 也可以在g ...

  5. Android开发(三十二)——延时

    模拟延时 private class GetDataTask extends AsyncTask<Void, Void, String[]> {@Overrideprotected Str ...

  6. Android项目实战(十五):自定义不可滑动的ListView和GridView

    不可滑动的ListView (RecyclweView类似) public class NoScrollListView extends ListView {public NoScrollListVi ...

  7. Android OpenCV(三十二):霍夫直线检测

    霍夫变换利用点与线之间的对偶性,将图像空间中直线上离散的像素点通过参数方程映射为霍夫空间中的曲线,并将霍夫空间中多条曲线的交点作为直线方程的参数映射为图像空间中的直线.给定直线的参数方程,可以利用霍夫 ...

  8. android圆角对话框,Android项目实战(三十二):圆角对话框Dialog

    原文: Android项目实战(三十二):圆角对话框Dialog 前言:html 项目中多处用到对话框,用系统对话框太难看,就本身写一个自定义对话框.android 对话框包括:一.圆角程序员 二.a ...

  9. Android项目实战--手机卫士

    Android项目实战--手机卫士--结束 很久都没有来更新博客了,之前一直忙着工作的事,接触到了一些以前从来没有接触过的东西,真的挺有挑战性的,但也有很多的无奈,但也学习到了很多东西,我会慢慢的写到 ...

最新文章

  1. 线性代数行列式计算之升阶法
  2. 华为服务器存储系列,华为 服务器 存储相关资料(示例代码)
  3. Spring Boot Test 进行JPA 测试保存数据到数据库
  4. 学习小感之浅谈学习兴趣之路
  5. 上一家单位离职的原因_员工离职再入职,专项附加扣除该如何变更?
  6. 帆软超级链接使用(根据内容跳转不同页面、超级链接使用js并传参、超级链接参数传递)
  7. matlab直方图线性拉伸,直方图均衡化与直方图规定化的MATLAB实现
  8. python开发贴吧_python爬虫-贴吧
  9. GandCrab勒索病毒
  10. python battleship_Python 入门教程 12 ---- Battleship!-阿里云开发者社区
  11. 用于高速网络的实时且可靠的基于异常的入侵检测
  12. TypeError: Can't convert 'int' object to str implicitly
  13. 一个汉字占用多少个字节?不同的编码方式
  14. Linux下套接字详解(五)----基于fork多进程的TCP套接字(阻塞/同步/并发)
  15. CookieSession
  16. usleep java_usleep是否创建了线程取消点?
  17. 如何下载安装与火狐浏览器不兼容的火狐浏览器插件
  18. Arp欺骗攻击的另类应用之屌丝泡妞记
  19. Centos 7 怎么都连不上手机阿阿阿阿Android Studio 怎么都检测不到真机啊还有关于git本地提交就缺少文件啊啊啊啊
  20. 操作系统经典20题总结==上岸

热门文章

  1. rake -T 列出所有RAKE 命令.
  2. Kotlin替换Dagger2/Hilt的依赖注入框架--Koin。
  3. android 将byte[]保存到手机
  4. Kubernetes 1.14重磅来袭,多项关键特性生产可用
  5. SpringCloud微服务架构,Config 分布式配置中心,Bus 消息总线, Stream 消息驱动,Sleuth+Zipkin 链路追踪
  6. 减小TabLayout高度而不影响每个tab展示的几种方法
  7. postman进阶之Newman,从安装到使用到填坑,不废话
  8. 更换checkbox的原有样式
  9. 使用Microsoft.Office.Interop.Excel时,64位问题
  10. 决策树 C4.5 理解要点