Android自己定义对话框实现QQ退出界面
效果
首先看下qq的效果图,点击菜单button后点退出就会出现如图的对话框.
从上图能够看出,该对话框有一个圆角,以及标题,提示信息,两个button,button颜色是白色,button点击后背景会变成灰色,正常状态下对话框的背景色是白色.而且除了点击取消button和返回键外,点击屏幕其它区域该对话框不会小时.那么如今我们来实现一下这个对话框.我们实现后的效果例如以下图所看到的
实现
首先编写我们的背景,背景默认情况下是白色的,而且有一个圆角,使用shape实现
<?
xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<corners
android:bottomLeftRadius="15px"
android:bottomRightRadius="15px"
android:topLeftRadius="15px"
android:topRightRadius="15px" />
<solid android:color="@color/dialog_background"/>
</shape>
然后编写我们的布局文件,布局中主要就是两个TextView,两个Button,TextView主要用于显示标题,和提示信息,标题是居中显示的,科能够使用gravity和layout_gravity一起实现,Button就是看到的最下方的button,两个button宽度比重为1:1,这时候能够用layout_weight实现,然后button上方有一条1像素高的灰色的切割线,button之间也有1像素款的灰色的切割线,这个能够使用设置View的宽度和高度,再设置背景色就可以,而button还有点击的效果,这个科一使用selector实现.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="320dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="50dip"
android:layout_gravity="center"
android:gravity="center"
android:text="退出"
android:textColor="@color/dialog_text"
android:textSize="18sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="60sp"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:gravity="center_vertical"
android:text="您确定要退出吗?"
android:textColor="@color/dialog_text"
android:textSize="16sp"
/>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/dialog_divider"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignParentBottom="true">
<Button
android:id="@+id/dialog_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="取消"
android:textColor="@color/dialog_btn"
android:background="@drawable/dialog_left_btn_selector"
/>
<View
android:layout_width="1px"
android:layout_height="match_parent"
android:background="@color/dialog_divider"
/>
<Button
android:id="@+id/dialog_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="确定"
android:textColor="@color/dialog_btn"
android:background="@drawable/dialog_right_btn_selector"
/>
</LinearLayout>
</LinearLayout>
我们还要编写selector文件,分为两个,一个是左边的button的效果,一个是右边的button的效果,为什么要用两个呢,由于这两个button有一个角是圆角的,而圆角的位置不同,一个是左下角,一个是右下角,所以我们须要两个这种文件,这里我们以左边的为例,右边的实现效果一样.
首先编写正常状态下的背景shape
<?xml version="1.0" encoding="UTF-8"?
>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FFFFFF"/>
<corners android:bottomLeftRadius="15px"/>
</shape>
然后编写选中状态或者说获得焦点时的背景shape
<?
xml version="1.0" encoding="UTF-8"?
>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#EAEAEA"/>
<corners android:bottomLeftRadius="15px"/>
</shape>
最后编写selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/dialog_left_btn_pressed"/>
<item android:state_focused="true" android:drawable="@drawable/dialog_left_btn_pressed"/>
<item android:drawable="@drawable/dialog_left_btn"/>
</selector>
对于右边button的背景,仅仅要将相应的left改成right就可以,这里也不贴代码了.
此外,我们还要编写一个默认的style,我们要去除默认Dialog讨厌的标题,全然使用我们自己的布局,以及其它一些设置
<style name="ExitDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/dialog_bg</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
这时候,我们新建一个ExitDialog类继承Dialog类,在构造方法里调用我们编写的style,以及对context对象的赋值,重写onCreate方法,设置我们的布局
public class ExitDialog extends Dialog {
private Context mContext;
private Button mConfirm;
private Button mCancel;
public ExitDialog(Context context) {
super(context,R.style.ExitDialog);
mContext=context;
}
public ExitDialog(Context context, int theme) {
super(context, theme);
mContext=context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_dialog);
}
}
而我们向让这个Diaglog点击对话框之外的区域不会消失,我们须要设置setCanceledOnTouchOutside(false).然后呢,我们须要设置点击事件,点击确定button会退出应用,点击取消当前对话框会消失
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_dialog);
//设置为我们的布局
this.setCanceledOnTouchOutside(false);
//设置为点击对话框之外的区域对话框不消失
mConfirm= (Button) findViewById(R.id.dialog_confirm);
mCancel= (Button) findViewById(R.id.dialog_cancel);
//设置事件
mConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.exit(0);
}
});
mCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ExitDialog.this.dismiss();
}
});
}
使用
实现也非常easy,之间将context对象传入构造一个ExitDialog对象,调用show方法显示就可以
ExitDialog dialog=new ExitDialog(MainActivity.this);
dialog.show();
源代码下载
Android自己定义对话框实现QQ退出界面的更多相关文章
- android 他们定义对话框
创建一个布局文件 my_dialog.xml <?xml version="1.0" encoding="utf-8"?> <Relative ...
- Android仿QQ ios dialog,仿QQ退出向上菜单
Android仿QQ ios dialog,仿QQ退出向上菜单 EasyDialog两种模式 仿QQ退出向上菜单,自己定义向上菜单 github地址:https://gith ...
- Android菜鸟的成长笔记(3)——给QQ登录界面说So Easy
原文:Android菜鸟的成长笔记(3)--给QQ登录界面说So Easy 上一篇:Android菜鸟的成长笔记(2)--第一个Android应用 我们前面已经做了第一个Android应用程序,虽然有 ...
- [转]Android:布局实例之模仿QQ登录界面
Android:布局实例之模仿QQ登录界面 预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布 ...
- Android:布局实例之模仿QQ登录界面
预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布为 4.分析样式选择器 下拉箭头2种样式:点 ...
- (二)SSO之CAS框架单点退出,自己定义退出界面.
用CAS的退出,仅仅能使用它自己的那个退出界面,假设有这种要求, 要求退出后自己主动跳转到登录界面, 该怎样做呢? 以下这篇文章实现了退出后能够自己定义跳转界面. 用了CAS,发现退出真是个麻烦事,退 ...
- Android 自学之对话框
Android为我们提供了丰富的对话框支持,提供了四种常用的对话框: AlertDialog:功能丰富.实际应用最广泛的对话框. ProgressDialog:进度对话框,该对话框只用于简单的进度条封 ...
- Android中的对话框AlertDialog使用技巧合集-转载
Android中的对话框AlertDialog使用技巧合集 文章来自:http://blog.csdn.net/blue6626/article/details/6641105 今天我用自 ...
- Android UI系列--对话框(一)(AlertDialog,TimePickerDialog,DatePickerDialog,ProgressDialog)
一.Dialog介绍 dialog就是一个在屏幕上弹出一个可以让用户做出一个选择,或者输入额外的信息的对话框,一个对话框并不会沾满我们整个的屏幕,并且通常用于模型事件当中需要用户做出一个决定后才会继续 ...
随机推荐
- C Tricks(十七)—— 对角线元素的屏蔽、二维数组(矩阵)的遍历
1. 对角线元素的屏蔽 使用 if + continue 实现对对角线元素的屏蔽 for u in range(n): for v in range(n): if u == v: continue . ...
- Node.js:安装配置
ylbtech-Node.js:安装配置 1.返回顶部 1. ode.js 安装配置 本章节我们将向大家介绍在window和Linux上安装Node.js的方法. 本安装教程以Node.js v4.4 ...
- python 下串口数据的读取,解析,和保存-
#!/usr/bin/python # -*-coding: utf-8 -*- import serial import threading import binascii from datetim ...
- How to read a paper efficiently
How to read a paper efficiently Structure of a Journal a Journal Article Title Keywords Abstract Int ...
- idiom的学习笔记(一)、三栏布局
三栏布局左右固定,中间自适应是网页中常用到的,实现这种布局的方式有很多种,这里我主要写五种.他们分别是浮动.定位.表格.flexBox.网格. 在这里也感谢一些老师在网上发的免费教程,使我们学习起来更 ...
- 08.十分钟学会JSP传统标签编程
一.认识标签 1,说明:传统标签编程在开发中基本用不到,学习标签编程主要还是为了完善知识体系. 2,标签的主要作用:移除或减少jsp中的java代码 3,标签的主要组成部分及运行原理 4,简单标签示例 ...
- hdu1385 Minimum Transport Cost 字典序最小的最短路径 Floyd
求最短路的算法最有名的是Dijkstra.所以一般拿到题目第一反应就是使用Dijkstra算法.但是此题要求的好几对起点和终点的最短路径.所以用Floyd是最好的选择.因为其他三种最短路的算法都是单源 ...
- window环境下,提升工作效率
效率工具 windows桌面程序 Listary 本地文件搜索器 有道词典 划词翻译, 并且能够存在生词本里面 印象笔记 浏览资料整理 chrom插件 crxMouse 鼠标手势 chrome vim ...
- javascript中创建对象和实现继承
# oo ##创建对象 1. 原型.构造函数.实例之间的关系 * 原型的construct->构造函数:调用isPrototypeOf(obj)方法可以判定和实例的关系: * 构造函数的pro ...
- 创建一个dynamics CRM workflow (二) - Build in Workflows
这里我们不着重讲解build in workflow. 但是, 如果要上手custom workflow, 我们必须要了解 build in workflow. build-in workflow 在 ...