Android中自定义对话框(Dialog)的实例代码

1.修改系统默认的Dialog样式(风格、主题)

2.自定义Dialog布局文件

3.可以自己封装一个类,继承自Dialog或者直接使用Dialog类来实现,为了方便以后重复使用,建议自己封装一个Dialog类

第一步:

  我们知道Android定义个控件或View的样式都是通过定义其style来实现的,查看Android框架中的主题文件,在源码中的路径:/frameworks/base/core/res/res/values/themes.xml,我们可以看到,Android为Dialog定义了一个样式,

复制代码 代码如下:

<style name="Theme.Dialog">

<item name="android:windowFrame">@null</item>

<item name="android:windowTitleStyle">@android:style/DialogWindowTitle</item>

<item name="android:windowBackground">@android:drawable/panel_background</item>

<item name="android:windowIsFloating">true</item>

<item name="android:windowContentOverlay">@null</item>

<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>

<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>

</style>

我们可以看到,在Themes.xml中定义的Dialog的样式,其中,定义了window的标题样式,window的背景图,是否悬浮等等。

  那么,我们要创建具有自定义样式的Dialog就可以创建一个styles.xml,在其中定义我们自己的Dialog样式,让其继承自Theme.Dialog样式,并修改其中的某些属性即可。

  定义我们自己的Dialog样式:

  a.创建一个styles.xml文件,放在res/values 文件夹下(当然了,这就不用说了。。。啰嗦一下)

  b.在styles.xml中定义Dialog样式,代码如下:

复制代码 代码如下:

<style name="Theme_dialog" parent="@android:style/Theme.Dialog">

<item name="android:windowBackground">@android:color/transparent</item>

<item name="android:windowNoTitle">true</item>

</style>

  上面代码中,定义了一个样式Theme_dialog,继承自@android:style/Theme.Dialog,然后定义了Dialog所在Window的背景图,此处使用的是透明颜色#00000000,然后定义了Dialog所在的Window隐藏标题(系统定义Dialog样式是带有标题的,在此设置此属性为true可隐藏标题),自定义Dialog样式到这就完成了。

第二步:

  定义Dialog的布局:

  创建一个布局文件layout_dialog.xml,代码如下:

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

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

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@drawable/pp_bg_dialog"

android:gravity="center">

<ProgressBar android:layout_width="wrap_content"

android:layout_height="wrap_content"

style="@style/progressbar_normal"/>

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"

style="@style/text_white_small" android:layout_marginTop="5dp"

android:text="正在删除..." android:id="@+id/message"/>

</LinearLayout>

这里使用了一个垂直方向的线性布局,并且设置所有子元素居中,子元素为已个进度条ProgressBar和一个TextView。

  此处,ProgressBar采用自定义样式,使用系统默认的ProgressBar可达到同样的效果(大同小异)。LinearLayout的背景

android:background="@drawable/pp_bg_dialog"(即上面效果图中居中显示的黑色透明背景框)是一个自定义的图片资源Shape:

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>

<shape

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

android:shape="rectangle">

<corners android:radius="10dp"/>

<solid android:color="#55000000"/>

</shape>

代码中定义了一个矩形,并设置了圆角和颜色。到此,Dialog的布局就完成了。

第三步:

  自定义CustomDialog类,继承自Dialog,代码如下:

复制代码 代码如下:

public class CustomDialog extends Dialog { 2

private static int default_width = 160; //默认宽度

private static int default_height = 120;//默认高度

public CustomDialog(Context context, int layout, int style) {

this(context, default_width, default_height, layout, style);

}

public CustomDialog(Context context, int width, int height, int layout, int style) {

super(context, style);12

//set content

setContentView(layout);

//set window params

Window window = getWindow();

WindowManager.LayoutParams params = window.getAttributes();

//set width,height by density and gravity

float density = getDensity(context);

params.width = (int) (width*density);

params.height = (int) (height*density);

params.gravity = Gravity.CENTER;

window.setAttributes(params);

}

private float getDensity(Context context) {

Resources resources = context.getResources();

DisplayMetrics dm = resources.getDisplayMetrics();

return dm.density;

}

}

在构造方法中设置了Dialog的contentView,并且设置了Window的宽度、高度和居中显示。

CustomDialog使用方法如下:

复制代码 代码如下:

public class CustomDialogDemoActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.test);

CustomDialog dialog1 = new CustomDialog(this, R.layout.common_dialog, R.style.Theme_dialog);//Dialog使用默认大小(160)

CustomDialog dialog2 = new CustomDialog(this, 180, 180, R.layout.common_dialog, R.style.Theme_dialog);

dialog2.show();//显示Dialog

    //如果要修改Dialog中的某个View,比如把"正在删除..."改为"加载中..."

TextView mMessage = (TextView) dialog2.findViewById(R.id.message);

mMessage.setText("加载中...");

}

}

大体过程就是这样,根据以上大家可以自由发挥吧,希望都设计出自己满意的dialog。

时间: 2024-12-25 12:54:28

Android中自定义对话框(Dialog)的实例代码的相关文章

Android中自定义对话框(Dialog)的实例代码_Android

1.修改系统默认的Dialog样式(风格.主题) 2.自定义Dialog布局文件 3.可以自己封装一个类,继承自Dialog或者直接使用Dialog类来实现,为了方便以后重复使用,建议自己封装一个Dialog类  第一步: 我们知道Android定义个控件或View的样式都是通过定义其style来实现的,查看Android框架中的主题文件,在源码中的路径:/frameworks/base/core/res/res/values/themes.xml,我们可以看到,Android为Dialog定义

Android中自定义的dialog中的EditText无法弹出输入法解决方案

1.解决无法弹出输入法: 在show()方法调用之前,用dialog.setView(new EditText(context))添加一个空的EditText,由于是自定义的AlertDialog,有我们指定的布局,所以设置这个不会影响我们的功能,这样就可以弹出输入法了-- 2.可以弹出输入法了,但了为了增强用户体验性,当dialog中含有editText时应该,在显示dialog的同时自动弹出键盘: (1) 可以在自定义的dialog中增加如下方法: public void showKeybo

Android中实现图文并茂的按钮实例代码

效果图如下所示: 代码: <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:gravity="center" android:background="#8

ANDROID中自定义对话框AlertDialog使用示例_Android

在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式.AlertDialog中定义的一些对话框往往无法满足我们关于对话框的需求,这时我们就需要通过自定义对话框VIEW来实现需求,这里我自定义一个登陆的提示对话框,效果图显示如下: Layout(alertdialog自定义登陆按钮)界面代码: <?xml version="1.0" en

ANDROID中自定义对话框AlertDialog使用示例

在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式.AlertDialog中定义的一些对话框往往无法满足我们关于对话框的需求,这时我们就需要通过自定义对话框VIEW来实现需求,这里我自定义一个登陆的提示对话框,效果图显示如下: Layout(alertdialog自定义登陆按钮)界面代码: <?xml version="1.0" en

Android中自定义Window Title样式实例_Android

Android提供了很多控件便于开发者进行UI相关的程序设计.但是很多时候,默认的一些UI设置不足以满足我们的需求,要么不好看,要么高度不够,亦或者是与应用界面不协调.于是这时候需要通过自定义样式或者自定义控件来实现. 当然,在空间足以满足需求的情况下,通常需要定义样式就可以搞定.本文将简单介绍如何通过自定义样式来实现定义Window Title. 先看一下效果图 逐步实现 在res/values/styles.xml文件中加入下列代码 复制代码 代码如下: <style name="My

Android中自定义Window Title样式实例

Android提供了很多控件便于开发者进行UI相关的程序设计.但是很多时候,默认的一些UI设置不足以满足我们的需求,要么不好看,要么高度不够,亦或者是与应用界面不协调.于是这时候需要通过自定义样式或者自定义控件来实现. 当然,在空间足以满足需求的情况下,通常需要定义样式就可以搞定.本文将简单介绍如何通过自定义样式来实现定义Window Title. 先看一下效果图 逐步实现 在res/values/styles.xml文件中加入下列代码 复制代码 代码如下: <style name="My

Android 中对JSON数据解析实例代码

Android 中对JSON数据解析 在Android的网络编程中,JSON是比XML使用更为广泛的数据传输机制.在许多的http网络请求或接口调用中,返回的很多都是JSON.所以学会解析JSON是学会Android的基本技能. 简单介绍下JSON,JSON是轻量级的文本数据交换格式,独立于语言和平台.比XML更小,更快,更易解析.JSON是用键值对来保存数据的.JSON保存的值可以是数字.字符串.布尔值.数组和对象. 废话少说,直接上代码.下面对以下JOSN进行解析: { "language&

Android中加入名片扫描功能实例代码_Android

要想实现android手机通过扫描名片,得到名片信息,可以使用脉可寻提供的第三方SDK,即Maketion ScanCard SDK,脉可寻云名片识别服务.他们的官方网站为http://www.maketion.com/. 一.概述 Maketion ScanCardSDK(以下简称SDK)是提供给第三方合作伙伴接入脉可寻云名片识别服务,合作伙伴需要先申请key和secure才可以使用. SDK不能独立运行,使用时需要嵌入到Android的Project中. SDK支持Android2.1版本及