如何修改alertdialog.builder的主题

Android--Dialog详细讲解 - 程序园
博文评论:36
资源评论:121
积分与排名
阅读排行榜
Android--Dialog详细讲解
  对话框对于应用也是必不可少的一个组件,在Android中也不例外,对话框对于一些提示重要信息,或者一些需要用户额外交互的一些内容很有帮 助。本篇博客就讲解一下Android下对话框的使用,在本篇博客中,将了解到对话框的一些常规属性的设置,以及各式的对话框的使用,并都会提供小 Demo来展示所有的效果。
  ,对话框,一个对话框就是一个小窗口,并不会填满整个屏幕,通常是以模态显示,要求用户必须采取行动才能继续进行剩下的操作。
  Android提供了丰富的对话框支持,它提供了如下4中常用的对话框:
AlertDialog:警告对话框,使用最广泛功能最丰富的一个对话框。
ProgressDialog:进度条对话框,只是对进度条进行了简单的封装。
DatePickerDialog:日期对话框。
TimePickerDialog:时间对话框。
  所有的对话框,都是直接或间接继承自Dialog类,而AlterDialog直接继承自Dialog,其他的几个类均继承自AlterDialog。
AlertDialog
  继承自Dialog类,对于Android内置的AlterDialog,它可以包含一个标题、一个内容消息或者一个选择列表、最多三个按钮。而创建AlterDialog推荐使用它的一个内部类创 建。使用Builder对象,可以设置AlterDialog的各种属性,最后通过Builder.create()就可以得到AlterDialog对 象,如果只是还需要显示这个AlterDialog,一般可以直接使用Builder.show()方法,它会返回一个AlterDialog对象,并且 显示它。
  如果仅仅是需要提示一段信息给用户,那么就可以直接使用AlterDialog的一些属性设置提示信息,涉及到的方法有:
AlterDialog create():根据设置的属性,创建一个AlterDialog。
AlterDialog show():根据设置的属性,创建一个AlterDialog,并且显示在屏幕上。
AlterDialog.Builder setTitle():设置标题。
AlterDialog.Builder setIcon():设置标题的图标。
AlterDialog.Builder setMessage():设置标题的内容。
AlterDialog.Builder setCancelable():设置是否模态,一般设置为false,表示模态,要求用户必须采取行动才能继续进行剩下的操作。
  Tips:AlterDialog.Builder的很多设置属性的方法,返回的均是这个AlterDialog.Builder对象,所以可以使用链式方式编写代码,这样更方便。
  当一个对话框调用了show()方法后,展示到屏幕上,如果需要消除它,可以使用DialogInterface接口声明的两个方 法,cancel()和dismiss()使对话框取或者消除,这两个方法的作用是一样的,不过推荐使用dismiss()。Dialog和 AlterDialog都实现了DialogInterface接口,所以只要是对话框,均可以使用这两个方法来消除对话框。
  下面通过一个简单的Demo,先看看AlterDialog是如何提示信息的:
  示例:
btnGeneral.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
builder.setTitle(&提示&);
builder.setMessage(&这是一个普通的对话框!&);
builder.setIcon(R.drawable.ic_launcher);
builder.setCancelable(false);
builder.setPositiveButton(&知道了!&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
builder.create().show();
展示效果:
AlterDialog的按钮
  AlterDialog内置了三个按钮,可以直接使用setXxxButton()方法进行设置,对于一般的对话框,使用三个按钮基本上也够用了,下面是这三个方法的签名:
AlterDialog.Builder setPositiveButton(CharSquence text , DialogInterFace.OnClickListener):一个积极的按钮,一般用于&OK&或者&继续&等操作。
AlterDialog.Builder setNegativeButton(CharSquence text , DialogInterFace.OnClickListener):一个负面的按钮,一般用于&取消&操作。
AlterDialog.Builder setNeutralButton(CharSquence text , DialogInterFace.OnClickListener):一个比较中性的按钮,一般用于&忽略&、&以后提醒我&等操作。
  上面介绍的DialogInterface接口,还提供了一系列的事件响应,这三个按钮均需要传递一个 DialogInterFace.OnClickListener接口对象,实现其点击事件的触发,在这个接口中需要实现一个 onClick(DialogInterface dialog,int which),dialog为当前触发事件的对话框对象接口,可以直接强制转换为AlterDialog进行操作;which为点击按钮的标识符,是一个 整形的数据,对于这三个按钮而言,每个按钮使用不同的int类型数据进行标识:Positive(-1)、Negative(-2)、 Neutral(-3)。
  而除了专门为按钮点击实现的DialogInterFace.OnClickListener事件外,DialogInterface还提供了 一些其他的事件,供Dialog对象响应,这些事件只是对Dialog声明周期各个状态的响应,一看就明白了,就不再详细讲解了,下面是这几个事件的说 明:
interface DialogInterface.OnCancelListener:当对话框调用cancel()方法的时候触发。
interface DialogInterface.OnDismissListener:当对话框调用dismiss()方法的时候触发。
interface DialogInterface.OnShowListener:当对话框调用show()方法的时候触发。
interface DialogInterface.OnMultiChoiceListener:当对话框使用多选列表,并且选中的时候触发。
  示例:
btnButtons.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
builder.setTitle(&提示&);
builder.setMessage(&这是一个多按钮普通的对话框!&);
builder.setIcon(R.drawable.ic_launcher);
builder.setPositiveButton(&确定&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, &确定被点击&,
Toast.LENGTH_SHORT).show();
dialog.dismiss();
builder.setNegativeButton(&否定&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, &否定被点击&,
Toast.LENGTH_SHORT).show();
dialog.dismiss();
builder.setNeutralButton(&忽略&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, &忽略被点击&,
Toast.LENGTH_SHORT).show();
dialog.cancel();
builder.show();
  展示效果:
AlterDialog的列表形式
  AlterDialog除了展示一些提示信息,还可以展示一种列表的形式,需要使用到 Builder.setItems(CharSequence[] items,DialogInterface.OnClickListener listener)方法进行设置,它需要传递一个CharSequenece类型的数组,以绑定列表的数据,它同样需要传递一个 DialogInterface.OnClickListener接口,以响应列表项的点击,而这个接口中onClick方法的which参数,为当前点 击触发项的items中的下标。
  示例:
btnListView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
builder.setTitle(&请选择城市&);
//items使用全局的finalCharSequenece数组声明
builder.setItems(items, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String select_item = items[which].toString();
Toast.makeText(MainActivity.this,
&选择了---》& + select_item, Toast.LENGTH_SHORT)
builder.show();
  效果展示: 
&AlterDialog的单选列表
  AlterDialog还可以使用一种单选的列表样式,使用 Builder.setSingleChoiceItems(CharSequenece[] items,int checkedItem,DialogInterface.OnClickListener listener),这个方法具有多项重载,主要是为了应对不同的数据源,items为列表项数组,checkedItem为初始选项,listener 为点击响应事件。有时候并不一定需要选中之后就关闭对话框,可以设置两个按钮,用于确定选择。
  示例:
btnListViewSingle.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
builder.setTitle(&请选择一下城市&);
builder.setSingleChoiceItems(items, 1, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String select_item = items[which].toString();
Toast.makeText(MainActivity.this,
&选择了---&&& + select_item, Toast.LENGTH_SHORT)
builder.setPositiveButton(&确定&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
builder.show();
  效果展示:
AlterDialog多选列表
  AlterDialog除了单选列表,还有多选的列表。可以使用 Builder.setMultiChoiceItems(CharSequence[] items,boolean[] checkedItems,DialogInterface.OnMultiChoiceClickListener listener),这个方法也同样具有多样重载,对于这个方法,items以一个数组为数据源;checkedItems是默认的选项,因为是多选列 表,所以如果设置需要全部设置,如果没有默认选中,则传Null;listener为多选项点击触发事件。
  示例:&
btnListViewMulti.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
builder.setTitle(&请选择城市&);
builder.setMultiChoiceItems(items, new boolean[] { true, false,
true }, new OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
// TODO Auto-generated method stub
String select_item = items[which].toString();
Toast.makeText(MainActivity.this,
&选择了---&&& + select_item, Toast.LENGTH_SHORT)
builder.setPositiveButton(&确定&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
builder.show();
  效果展示:
AlertDialog自定义样式
  有些时候,Android自带的一些样式设置已经无法满足需求了,那么可以使用自定义样式,自定义个XML布局文件,用这个文件的内容作为 AlertDialog的样式展示在屏幕上,这样就可以灵活定制对话框了。对于定制的XML文件,可以使用 LayoutInflater.from(Context).inflate(int,ViewGroup)的方式对其进行动态加载,然后使用 Builder.setView(View)把加载的视图与Builder对象进行关联,最后正常show()即可。
  布局代码:
&LinearLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&vertical&
android:paddingBottom=&@dimen/activity_vertical_margin&
android:paddingLeft=&@dimen/activity_horizontal_margin&
android:paddingRight=&@dimen/activity_horizontal_margin&
android:paddingTop=&@dimen/activity_vertical_margin&
tools:context=&.MainActivity& &
android:id=&@+id/btnGeneral&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&普通对话框& /&
android:id=&@+id/btnButtons&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&多按钮的普通对话框& /&
android:id=&@+id/btnListView&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&列表选择对话框& /&
android:id=&@+id/btnListViewSingle&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&单选列表选择对话框& /&
android:id=&@+id/btnListViewMulti&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&多选列表选择对话框& /&
android:id=&@+id/btnProgressDialog&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&滚动等待对话框& /&
android:id=&@+id/btnProgressDialogH&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&进度条对话框& /&
android:id=&@+id/btnCustomDialog&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&自定义对话框& /&
&/LinearLayout&
  实现代码:
btnCustomDialog.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_signin,null);
Button btn=(Button)view.findViewById(R.id.btnCustom);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
alertDialog.dismiss();
Toast.makeText(MainActivity.this, &表单填写完成&,
Toast.LENGTH_SHORT).show();
builder.setView(view);
alertDialog=builder.show();
  效果展示:
ProgressDialog
  有些时候,只是需要提示用户等待,比如在执行耗时操作等的时候,可以使用进度对话框来显示一个进度信息,提示用户等待,这个时候可以使用 ProgressDialog。ProgressDialog的使用方式大部分可以参见ProgressBar,其实就是一个封装了 ProgressBar的对话框。
  有 两种显示方式,一种是以一个滚动的环状图标,可以显示一个标题和一段文本内容的等待对话框;另外一种是带刻度的进度条,和常规的进度条用法一致。两种样式 通过ProgressDialog.setProgressStyle(int style)设置,可以通过ProgressDialog的两个常量进行设置:STYLE_HORIZONTAL:刻度滚 动;STYLE_SPINNER:图标滚动,默认选项。
  对于图标滚动,可以使用两种方式实现,一种是常规的调用构造函数,再设置对应的属性;另外一种是直接使用ProgressDialog的静态方法show(),直接返回一个ProgressDialog对象,并且调用show()方法。
  示例:
btnProgressDialog.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 第一种方法,使用ProgressDialog构造函数
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setIcon(R.drawable.ic_launcher);
progressDialog.setTitle(&等待&);
progressDialog.setMessage(&正在加载....&);
progressDialog.show();
//第二种方法,使用静态的show方法
//progressDialog=ProgressDialog.show(MainActivity.this, &等待&, &正在加载....&, false, false);
new Thread(new Runnable() {
public void run() {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
progressDialog.dismiss();
}).start();
  效果展示:
  对于有刻度的ProgressDialog,除了从AlertDialog中继承来的属性,有一些必要的属性需要设置,以下方法都有对于的getter方法:
setMax(int max):最大刻度。
setProgress(int value):第一进度。
setSecondaryProgress(int value):第二进度。
  示例:
btnProgressDialog.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 第一种方法,使用ProgressDialog构造函数
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setIcon(R.drawable.ic_launcher);
progressDialog.setTitle(&等待&);
progressDialog.setMessage(&正在加载....&);
progressDialog.show();
//第二种方法,使用静态的show方法
//progressDialog=ProgressDialog.show(MainActivity.this, &等待&, &正在加载....&, false, false);
new Thread(new Runnable() {
public void run() {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
progressDialog.dismiss();
}).start();
  效果展示:
  以上就介绍了常用的对话框的内容,DatePickerDialog和TimePickerDialog在另外一篇博客中有介绍到,可以看看:。 从最新的官方文档上了解到,推荐使用FragmentDialog来操作Dialog,这样便于管理,有关Fragment的内容,还没有介绍,以后介绍 了Fragment之后再说说怎么使用FragmentDialog来创建对话框。在源码里有一个FragmentDialog的简单例子,有兴趣的可以 下载下来看看。
所属分类:
推荐成功关注成功
收藏成功消息已发发送
您可能还喜欢<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&Android主题定制及修改
主题定制及修改
简介:在写Android的App时,我们在Layout中的xml文件中都会引用到大量的布局及风格,有时Android提供的原生组件并不能满足我们的需求,这时我们就要考虑对style及theme进行定制及修改。
布局文件的解释原理:
在Layout的每一个控件如TextView、EditText、Button等,例如Button控件,在目录frameworks/base/core/java/android/widget/下存在Button.java这个文件,在Button.java代码:
&&&&&&& public Button(Context context, AttributeSet attrs) {
&&&&&&& this(context, attrs, com.android.internal.R.attr.buttonStyle);
&&& public Button(Context context, AttributeSet attrs, int defStyle) {
&&&&&&& super(context, attrs, defStyle);
&&& 在layout中的布局控件就是引用的Button.java这个控制,写完App程序进行编译时,它会自动引用及关联相应的控件定义。第一个构造函数是Button的默认style,而第二个会根据写app写的style进行选择需要的style.Button继承自TextView.java,在这个文件中的构造函数会看到选择的过程,这个构造函数是相当庞大的一个函数。
Button.java有引用相关的style及主题,例如在Button.java就引用了buttonStyle这个style,在写layout就可以在Button这个控制中加入这个style,所有的风格的定义都是在framework中的在frameworks/base/core/res/res/values/themes_device_defaults.xml有关于所有style的theme的名字,这些style的定义在frameworks/base/core/res/res/values/styles_device_defaults.xml文件中,进扩展Item便可以得到某个style的的所有属性。
在styles.xml存在这个的定义:
&&&&&&& &style name=&Widget.DeviceDefault.Button& parent=&Widget.Holo.Button& &
&&&&&&& &/style&
&&& 这里的Widget.DeviceDefault.Button继承自Widget.Holo.Button,这里Widget.Holo.Button style便拥有Widget.Holo.Button 控件上的所有属性及功能,这里跟类继承非常类似,如果不需要Widget.Holo.Button控件的一些item,可以进行重写,
&&& &style name=&Widget.DeviceDefault.Button& parent=&Widget.Holo.Button& &
&&& &item name=&android:textColor&&@android:color/XXX&/item&
&&& &/style&
&&& 便对android:textcolor进行了复写,这里把XXX可以在一个xml定义,并写上相应的颜色值,由于在framework中进行了修改,所有在app中引用的这个控件都将进行修改。如果不想在所有的app中这个控件都起作用,便可以在app中对这个控件进行重写。将style写在一个app的layout中的xml文件,只对此app起作用。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'当前位置:
定义Activity的主题为Theme.Dialog,实现自定义对话框
来源: 联系QQ: 作者: 佚名 来源: 网络 发布时间: 12/10/19
le.ic_dialog_alert); }Override protected void onCreate(Bundle savedInstanceState) { // Be sure to call the super class. super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_LEFT_ICON); // See assets/res/any/layout/dialog_activity.xml for this // view layout definition, which is being set here as // the content of our screen. setContentView(R.layout.dialog_activity); getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, android.R.drawable.ic_dialog_alert); }1、申请设置个性化小图标,需在 setContentView(R.layout.dialog_activity) 之前调用。 Java 代码requestWindowFeature(Window.FEATURE_LEFT_ICON);requestWindowFeature(Window.FEATURE_LEFT_ICON);2、设置小图标Java 代码getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, android.R.drawable.ic_dialog_alert);&
上一篇资讯:
下一篇资讯:
文章排行榜<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 alertdialog.builder 的文章

 

随机推荐