版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】自定义Dialog
需要实现的效果图:
一个项目所用到的对话框风格必须统一,但显示的文字、布局却可以不同。如果每个对话框都要重新去创建的话,会增加代码的冗余,浪费资源。所以可以写个类MyDialog继承Dailog。需要的时候直接调用MyDialog类。一、新建xml布局。<?xml
version="1.0"
encoding="utf-8"?>
<FrameLayout
xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
>
<TextView
android:id="@+id/title"
android:textSize="18dp"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:gravity="center"
android:textColor="#000000"
android:textStyle="bold"
android:text="InPut"
/>
<LinearLayout
android:id="@+id/content"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
>
<TextView
android:id="@+id/tv_message"
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="left|center"
android:textSize="16dp"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:textColor="#333333"
/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:gravity="left|center"
>
<EditText
android:id="@+id/et_psw_message"
android:layout_width="match_parent"
android:layout_height="45dp"
android:gravity="left|center"
android:inputType="textPassword"
android:textColorHint="@color/gray"
android:visibility="gone"
android:maxLength="30"
android:textSize="@dimen/font_14"
android:background="@drawable/edit_back">
<requestFocus
/>
</EditText>
<ImageView
android:id="@+id/img_change_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="15dp"
android:layout_centerVertical="true"
android:visibility="gone"
android:src="@drawable/img_change_name_style"
/>
</RelativeLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1.0px"
android:background="#ffd0d0d0"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_gravity="bottom"
android:background="#ffd0d0d0"
android:gravity="center"
android:orientation="horizontal"
>
<Button
android:id="@+id/negativeButton"
android:textSize="17dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="#ffffff"
android:layout_weight="1"
android:text="Cancel"
/>
<Button
android:id="@+id/positiveButton"
android:textSize="17dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="1px"
android:background="#ffffff"
android:gravity="center"
android:layout_weight="1"
android:text="Sure"
android:textStyle="bold"
android:textColor="#008ae7"
/>
</LinearLayout>
</LinearLayout>
</FrameLayout>xml效果图如下:
尽量将对话框要用到的所有控件在xml中排好,部分不需要的可以在代码setVisibility(View.GONE);让其消失,省的新建多个xml文件。二、继承Dailogpackage
com.dnake.evertalk.widgets;
import
com.dnake.evertalk.R;
import
android.app.Dialog;
import
android.content.Context;
import
android.content.DialogInterface;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.Window;
import
android.view.ViewGroup.LayoutParams;
import
android.widget.Button;
import
android.widget.EditText;
import
android.widget.LinearLayout;
import
android.widget.TextView;
public
class
MyDialog
extends
Dialog
{
public
MyDialog(Context
context)
{
super(context);
}
public
MyDialog(Context
context,
int
theme)
{
super(context,
theme);
}
public
static
class
Builder
{
private
Context
context;
private
String
title;
private
String
message;
private
String
positiveButtonText;
private
String
negativeButtonText;
private
View
contentView;
private
DialogInterface.OnClickListener
positiveButtonClickListener;
private
DialogInterface.OnClickListener
negativeButtonClickListener;
public
Builder(Context
context)
{
this.context
=
context;
}
public
Builder
setMessage(String
message)
{
this.message
=
message;
return
this;
}
public
Builder
setMessage(int
message)
{//设置信息
this.message
=
(String)
context.getText(message);
return
this;
}
public
Builder
setTitle(int
title)
{
//设置标题
this.title
=
(String)
context.getText(title);
return
this;
}
public
Builder
setTitle(String
title)
{//直接传字符串
this.title
=
title;
return
this;
}
public
Builder
setContentView(View
v)
{
this.contentView
=
v;
return
this;
}
/**
*
Set
the
positive
button
resource
and
it's
listener
*/
public
Builder
setPositiveButton(int
positiveButtonText,DialogInterface.OnClickListener
listener)
{
this.positiveButtonText
=
(String)
context.getText(positiveButtonText);
this.positiveButtonClickListener
=
listener;
return
this;
}
public
Builder
setPositiveButton(String
positiveButtonText,DialogInterface.OnClickListener
listener)
{
this.positiveButtonText
=
positiveButtonText;
this.positiveButtonClickListener
=
listener;
return
this;
}
public
Builder
setNegativeButton(int
negativeButtonText,DialogInterface.OnClickListener
listener)
{
this.negativeButtonText
=
(String)
context.getText(negativeButtonText);
this.negativeButtonClickListener
=
listener;
return
this;
}
public
Builder
setNegativeButton(String
negativeButtonText,DialogInterface.OnClickListener
listener)
{
this.negativeButtonText
=
negativeButtonText;
this.negativeButtonClickListener
=
listener;
return
this;
}
public
void
create(View
layout)
{
final
MyDialog
dialog
=
new
MyDialog(context,R.style.dialog_theme);
dialog.addContentView(layout,
new
LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
((TextView)
layout.findViewById(R.id.title)).setText(title);
if
(positiveButtonText
!=
null)
{
((Button)
layout.findViewById(R.id.positiveButton)).setText(positiveButtonText);
if
(positiveButtonClickListener
!=
null)
{
((Button)
layout.findViewById(R.id.positiveButton)).setOnClickListener(new
View.OnClickListener()
{
public
void
onClick(View
v)
{
positiveButtonClickListener.onClick(dialog,DialogInterface.BUTTON_POSITIVE);
}
});
}
}
else
{
layout.findViewById(R.id.positiveButton).setVisibility(View.GONE);
}
if(message
!=
null)
{
TextView
hint
=
(TextView)
layout.findViewById(R.id.tv_message);
hint.setText(message);
}
if
(negativeButtonText
!=
null)
{
((Button)
layout.findViewById(R.id.negativeButton)).setText(negativeButtonText);
if
(negativeButtonClickListener
!=
null)
{
((Button)
layout.findViewById(R.id.negativeButton)).setOnClickListener(new
View.OnClickListener()
{
public
void
onClick(View
v)
{
negativeButtonClickListener.onClick(dialog,DialogInterface.BUTTON_NEGATIVE);
}
});
}
}
else
{
layout.findViewById(R.id.negativeButton).setVisibility(View.GONE);
}
dialog.setContentView(layout);
dialog.show();
}
}
}三、在Activity中创建dialog,设置标题、信息以及按钮的处理事件
private
void
showDialog()
{
LayoutInflater
inflater
=
(LayoutInfl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《危机与冲突》课件
- 2024年度建筑材料放射性检测委托协议书3篇
- 2024年物联网智能传感器生产与销售合同
- 2024年校园网络安全责任协议2篇
- 2025年盐城货运从业资格证在哪考
- 2025年德阳货运从业资格证考试一共多少题
- 非谓语动词解题原则与技巧课件
- 2025年六盘水货运上岗资格证模拟考试
- 2024年度轻工企业节能减排承包合同3篇
- 2025年重庆货运从业资格证考试题技巧答案大全
- 2025届高考写作指导:议论文拟题方法及标题模板
- 知道智慧网课《化学分析》章节测试答案
- 11《葡萄沟》教学课件2023-2024学年统编版语文二年级上册
- JBT 14682-2024 多关节机器人用伺服电动机技术规范(正式版)
- DL-T5434-2021电力建设工程监理规范
- 2023-2024学年全国初中一年级上历史人教版期末试卷(含答案解析)
- 青海省西宁市2023-2024学年七年级上学期期末英语试题(含答案)
- 眼的解剖结构与生理功能课件
- 道路工程监理大纲
- 网络服务器搭建、配置与管理-LinuxRHEL8CentOS8(第4版)-课后习题答案
- 外科病人围手术期液体治疗专家共识
评论
0/150
提交评论