这篇文章主要为大家详细介绍了机器人自定义对话框对话的简单实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文着重研究了自定义对话框,通过一下步骤即可清晰的理解原理,通过更改界面设置和风格类型,可以应用在各种各样适合自己的应用中。
首先来看一下效果图:
首先是活动的界面
点击了上述图片的按钮后,弹出对话框:
点击对话框的确定按钮:
点击对话框的取消按钮:
下面来说一下具体实现步骤:
第一步:设置对话的样式(一般项目都可以直接拿来用):style.xml中
!-自定义对话背景全透明无边框主题-
style name='我的对话框' parent=' Android:style/Theme .'对话框'
!-背景颜色和透明程度-
item name=' Android:window background ' @ Android:color/transparent/item
!-是否去除标题-
item name=' Android:window not title ' true/item
!-是否去除边框-
item name=' Android:window frame ' @ null/item
!-是否浮现在活动之上-
item name=' Android:windowIsFloating ' true/item
!-是否模糊-
item name=' Android:backgroundDimEnabled ' false/item
/风格
第二步:自定义对话框:
(1)自定义的对话的布局:dialog.xml
?可扩展标记语言版本='1.0 '编码='utf-8 '?
相对布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '
Android:layout _ width=' match _ parent '
Android:layout _ height=' match _ parent '
android:background='#11ffffff '
线性布局
android:layout_width='260dp '
Android:layout _ height=' wrap _ content '
Android:layout _ centerInParent=' true '
Android:background=' @ drawable/free _ dialog _ BG '
安卓:方向='垂直'
文本视图
android:id='@ id/title '
Android:layout _ width=' wrap _ content '
Android:layout _ height=' wrap _ content '
android:layout_gravity='center '
android:text='警告!'
android:textColor='#38ADFF '
android:textSize='16sp'/
文本视图
android:id='@ id/message '
Android:layout _ width=' wrap _ content '
Android:layout _ height=' wrap _ content '
Android:layout _ margin left=' 20dp '
Android:layout _ margin right=' 20dp '
android:layout_gravity='center '
android: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:id='@ id/no '
android:layout_width='0dp '
Android:layout _ height=' match _ parent '
android:layout_weight='1 '
Android:layout _ margin left=' 10dp '
android:background='@null '
安卓:重力='中心'
android:lines='1 '
android:text='取消'
android:textColor='#7D7D7D '
android:textSize='16sp'/
视角
android:layout_width='1px '
Android:layout _ height=' match _ parent '
android:background='#E4E4E4'/
纽扣
android:id='@ id/yes '
android:layout_width='0dp '
Android:layout _ height=' match _ parent '
android:layout_weight='1 '
Android:layout _ margin right=' 10dp '
android:background='@null '
安卓:重力='中心'
android:lines='1 '
android:text='确定'
android:textColor='#38ADFF '
android:textSize='16sp'/
/线性布局
/线性布局
/RelativeLayout
(2)自定义对话布局中的背景:free_dialog_bg.xml
?可扩展标记语言版本='1.0 '编码='utf-8 '?
shape xmlns:Android=' http://架构。安卓。' com/apk/RES/Android '
Android:layout _ width=' match _ parent '
Android:layout _ height=' match _ parent '
坚固的android:color='#ffffff' /
中风
android:width='0.8dp '
android:color='#ffffff' /
!-圆角-
corners android:radius='6dp' /
/形状
(3) 自定义的对话的java:MyDialog.class
包com。西亚。我的对话;
导入安卓。app。对话;
导入安卓。内容。语境;
导入安卓。OS。捆绑;
导入安卓。支持。注释。非空;
导入安卓。支持。注释。styleres
导入安卓。查看。查看;
导入安卓。小部件。按钮;
导入安卓。小部件。textview
/**
* 创建自定义的对话,主要学习实现原理
*由管理员在2017/8/30创建。
*/
公共类我的对话扩展对话框{
私扣是//确定按钮
私人按钮号;//取消按钮
私有TextView titleTV//消息标题文本
私有文本视图消息;//消息提示文本
私有字符串titleStr//从外界设置的标题文本
私有字符串messageStr//从外界设置的消息文本
//确定文本和取消文本的显示的内容
私有字符串是的,诺斯特
private onNoOnclickListener noOnclickListener;//取消按钮被点击了的监听器
private onYesOnclickListener yesOnclickListener;//确定按钮被点击了的监听器
public my dialog(@ NonNull Context Context,@StyleRes int themeResId) {
super(context,themeResId);
}
/**
* 设置取消按钮的显示内容和监听
*
* @param str
* @param onNoOnclickListener
*/
public void setNoOnclickListener(String str,onNoOnclickListener onNoOnclickListener){
if (str!=null) {
noStr=str
}
这个。noon click listener=onNoOnclickListener;
}
/**
* 设置确定按钮的显示内容和监听
*
* @param str
* @param yesOnclickListener
*/
public void setYesOnclickListener(String str,onYesOnclickListener yesOnclickListener){
if (str!=null) {
yesStr=str
}
这个。yesOnclickListener=yesOnclickListener;
}
@覆盖
受保护的void onCreate(Bundle saved instancestate){
超级棒。oncreate(savedInstanceState);
setContentView(r . layout。对话);
//空白处不能取消动画
setCanceledOnTouchOutside(false);
//初始化界面控件
init view();
//初始化界面数据
initData();
//初始化界面控件的事件
init事件();
}
/**
* 初始化界面控件
*/
私有void initView() {
yes=findViewById(r . id。是);
no=findViewById(r . id。否);
title TV=(TextView)findViewById(r . id。标题);
message=(TextView)findViewById(r . id。消息);
}
/**
* 初始化界面控件的显示数据
*/
私有void initData() {
//如果用户自定了标题和消息
if (titleStr!=null) {
标题电视。settext(titleStr);
}
if (messageStr!=null) {
消息。settext(messageStr);
}
//如果设置按钮文字
如果(yesStr!=null) {
是的。settext(是字符串);
}
if (noStr!=null) {
编号settext(noStr);
}
}
/**
* 初始化界面的确定和取消监听
*/
私有void initEvent() {
//设置确定按钮被点击后,向外界提供监听
yes.setOnClickListener(新视图OnClickListener() {
@覆盖
公共void onClick(视图五){
if (yesOnclickListener!=null) {
yesonclicklistener。onyesonclick();
}
}
});
//设置取消按钮被点击后,向外界提供监听
编号setOnClickListener(新视图OnClickListener() {
@覆盖
公共void onClick(视图五){
if (noOnclickListener!=null) {
正午点击收听者。onnoclick();
}
}
});
}
/**
* 从外界活动为对话设置标题
*
* @param标题
*/
公共无效设置标题(字符串标题){
titleStr=标题
}
/**
* 从外界活动为对话设置消息
*
* @param消息
*/
公共void setMessage(字符串消息){
messageStr=消息
}
onNoOnclickListener上的公共接口{
public void onNoClick();
}
onYesOnclickListener上的公共接口{
public void onYesOnclick();
}
}
第三步:活动中使用自定义对话框:
(1)活动的布局文件:activity_main.xml
?可扩展标记语言版本='1.0 '编码='utf-8 '?
安卓。支持。约束。约束布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '
xmlns:app=' http://模式。安卓。' com/apk/RES-auto '
xmlns:tools=' http://模式。安卓。' com/tools '
Android:layout _ width=' match _ parent '
Android:layout _ height=' match _ parent '
工具:context=' com。西亚。我的对话。'主要活动'
纽扣
android:id='@ id/btn '
Android:layout _ width=' wrap _ content '
Android:layout _ height=' wrap _ content '
android:text='自定义'对话框'
app:layout _ constraint bottom _ to bottom of=' parent '
app:layout _ constraint left _ toLeftOf=' parent '
app:layout _ constraint right _ to right of=' parent '
app:layout _ constraint top _ toTopOf=' parent '/
/安卓。支持。约束。约束布局
(2)主活动。类
包com。西亚。我的对话;
导入安卓。支持。V7。app。app compat活动;
导入安卓。OS。捆绑;
导入安卓。查看。查看;
导入安卓。查看。窗户;
导入安卓。小部件。按钮;
导入安卓。小部件。敬酒;
公共类主要活动扩展AppCompatActivity {
私有我的对话我的对话
私人按钮按钮;
@覆盖
受保护的void onCreate(Bundle saved instancestate){
超级棒。oncreate(savedInstanceState);
requestWindowFeature(窗口。特征_编号_标题);
setContentView(r . layout。活动_主);
Button=(Button)findViewById(r . id。BTN);
button.setOnClickListener(新视图OnClickListener() {
@覆盖
公共void onClick(视图视图){
我的对话框=新建我的对话框(主活动。这是r风格的。我的对话);
myDialog.setTitle('警告!');
myDialog.setMessage('警告:您的手机3秒钟内自爆');
myDialog.setYesOnclickListener('确定,新建我的对话框。onyesonclicklistener(){
@覆盖
公共void onYesOnclick() {
吐司。制作文本(getApplicationContext(),'拜拜,我们来生见,吐司。长度_长)。show();
我的对话。dissolve();
}
});
myDialog.setNoOnclickListener('取消,新建我的对话框。onnouncliclistener(){
@覆盖
公共void onNoClick() {
吐司。制作文本(getApplicationContext(),'明智的选择,吐司。长度_长)。show();
我的对话。dissolve();
}
});
我的对话。show();
}
});
}
}
原理:
1、通过构造方法给对话设置一个主题R.style.MyDialog,主要设置对话的显示属性,一般都是全透明无边框;
2、然后在对话的onCreate()方法中,用设置内容视图(r .布局自我对话)为对话设置可扩展标记语言文件,我们就可以在布局文件中创建自定义的对话风格。这里我就自定义了可扩展标记语言文件格式,实现了自定义的外观风格,不受系统的主题影响。
3、然后通过设置要为外界设置一些公众的公开的方法,来向自定义的对话传递值。这里的标题和消息,都是可以通过外界传值进来,进行设置的。如下面的公众的方法就是供外界活动来设置标题和消息的:
/**
* 从外界活动为对话设置标题
*
* @param标题
*/
公共无效设置标题(字符串标题){
titleStr=标题
}
/**
* 从外界活动为对话设置消息
*
* @param消息
*/
公共void setMessage(字符串消息){
messageStr=消息
}
在活动通过实例化对话后就可以设置蒂蒂莱和消息了。
我的对话框=新建我的对话框(主活动。这个);
myDialog.setTitle('警告!');
myDialog.setMessage('警告:您的手机3秒钟内自爆');
另外在MyDialog.class中通过下面构造器可以更灵活的选择对话的类型
public my dialog(@ NonNull Context Context,@StyleRes int themeResId) {
super(context,themeResId);
}
活动中使用自定义的对话框:
我的对话框=新建我的对话框(主活动。这是r风格的。我的对话);
4、最后,自定义的对话中包含了一些按钮的时候,这个时候要想让按钮有点击事件,并且把这个点击事件能够传递给活动,让活性做一些事情,这里就需要设置监听接口,让按钮的点击事件能够让外界活动知道。如下面的代码。
/**
* 确定按钮接口
*/
onNoOnclickListener上的公共接口{
public void onNoClick();
}
/**
* 取消按钮接口
*/
onYesOnclickListener上的公共接口{
public void onYesOnclick();
}
private onNoOnclickListener noOnclickListener;//取消按钮被点击了的监听器
private onYesOnclickListener yesOnclickListener;//确定按钮被点击了的监听器
/**
* 设置取消按钮的显示内容和监听
*
* @param str
* @param onNoOnclickListener
*/
public void setNoOnclickListener(String str,onNoOnclickListener onNoOnclickListener){
if (str!=null) {
noStr=str
}
这个。noon click listener=onNoOnclickListener;
}
/**
* 设置确定按钮的显示内容和监听
*
* @param str
* @param yesOnclickListener
*/
public void setYesOnclickListener(String str,onYesOnclickListener yesOnclickListener){
if (str!=null) {
yesStr=str
}
这个。yesOnclickListener=yesOnclickListener;
}
//设置确定按钮被点击后,向外界提供监听
yes.setOnClickListener(新视图OnClickListener() {
@覆盖
公共void onClick(视图五){
if (yesOnclickListener!=null) {
yesonclicklistener。onyesonclick();
}
}
});
//设置取消按钮被点击后,向外界提供监听
编号setOnClickListener(新视图OnClickListener() {
@覆盖
公共void onClick(视图五){
if (noOnclickListener!=null) {
正午点击收听者。onnoclick();
}
}
});
活动就可以设置监听接口来实时获取按钮的点击事件如下:
myDialog.setYesOnclickListener('确定,新建我的对话框。onyesonclicklistener(){
@覆盖
公共void onYesOnclick() {
吐司。制作文本(getApplicationContext(),'拜拜,我们来生见,吐司。长度_长)。show();
我的对话。dissolve();
}
});
myDialog.setNoOnclickListener('取消,新建我的对话框。onnouncliclistener(){
@覆盖
公共void onNoClick() {
吐司。制作文本(getApplicationContext(),'明智的选择,吐司。长度_长)。show();
我的对话。dissolve();
}
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。