`

自定义AlertDialog样式,根据屏幕大小来显示

阅读更多
先介绍一些关于AlertDialog的基本知识:

    一、AlertDialog简介:AlertDialog的构造方法被声明为protected,所以不能直接使用new关键字来创建AlertDialog类的对象实例。要想创建AlertDialog对话框,需要使用Builder类,该类是AlertDialog类中定义的一个内嵌类。因此必须创建AlertDialog.Builder类的对象实例,然后再调用show()来显示对话框。

    二、使用AlertDialog创建对话框的种类:

        1. 最多带3个按钮的对话框:setPositiveButton(...)--确认、setNegativeButton(...)--取消、setNeutralButton(...)--忽略

        2.简单列表对话框:通过AlertDialog.Builder类的setItems(...)方法可以创建简单的列表对话框。其实,这种类型的对话框相当于将ListView组件放在对话框上,然后再在ListView中添加若干简单的文本。

        3.单选列表对话框:通过AlertDialog.Builder类的setSingleChoiceItems(...)来创建。目前支持4种数据源(数组资源、数据集、字符串数组、ListAdapter)

        4.多选列表对话框:通过AlertDialog.Builder类的setMultiChoiceItems(...)创建。目前支持3种数据源(数组资源、数据集、字符串数组)

        5.水平进度或圆形对话框(默认是:圆形):该类型的对话框是通过ProgressDialog来实现,该类是AlertDialog的子类,它不需要用create()方法来返回实例对象,只需要new即可。

           ProgressDialog.STYLE_HORIZONTAL //水平进度样式

           ProgressDialog.STYLE_SPINNER    //圆形样式

        6.自定义对话框:直接使用XML布局文件或以编写JAVA代码方式来创建视图,并将这些视图对象添加到对话框中去。

        7.使用Activity托管对话框:Activity类中也提供了创建对话框的方式,有个onCreateDialog(int id)的方法,其返回类型是Dialog,通过是当调用Activity类的showDialog(int id)方法时,系统会调用该方法来返回一个Dialog对象。showDialog和onCreateDialog都有一个int类型的id参数,该参数值将传递给onCreateDialog方法。因此,我们可以利用不同的id创建多个对话框。

         ***注意***:对于表示某一个对话框的ID,系统只在第1次调用showDialog方法时调用onCreateDialog方法。在第1次创建Dialog对象时系统会将该对象保存在Activity的缓存里,相当于一个Map对象,对话框的ID作为Map的Key,而Dialog对象作为Map的Value。下次再调用时,会先根据这个ID从Map中获得第1次创建的Dialog对象。除非该ID已经被删除。

        8.悬浮对话框和触摸任何位置都可以关闭的对话框:

        1).悬浮对话框:android:theme="@android:style/Theme.Dialog";对于该类型的对话框,触摸屏幕任何位置都会触发Activity的OnTouchEvent事件。

         2).触摸任何位置都可以关闭的对话框:首先必须要继承AlertDialog类,并重写OnTouchEvent事件。

第一种:
/** 
* 自定义AlertDialog 
* 
* @author chenjianli 2011-05-10 
*/ 
public void alert(){ 
	WindowManager manager = getWindowManager(); 
	Display display = manager.getDefaultDisplay(); 
	int width = display.getWidth(); 
	int height = display.getHeight(); 

	LayoutInflater inflater = getLayoutInflater(); 
	View view = inflater.inflate(R.layout.alert, null); 

	TextView text = (TextView)view.findViewById(R.id.text); 
	text.setText("自定义AlertDialog"); 

	AlertDialog alert = new AlertDialog.Builder(this).create(); 
	alert.show(); 

	alert.getWindow().setLayout(width/2, height/4); 
	alert.setTitle("测试"); 
	alert.getWindow().setContentView(R.layout.alert); 
}


第二种:
/** 
* 自定义AlertDialog 
* 
* @author chenjianli 2011-05-10 
*/ 

AlertDialog zidongbofangDialog = new AlertDialog.Builder(ManHuaActivity.this).create(); 
zidongbofangDialog.show(); 
zidongbofangDialog.getWindow().setGravity(Gravity.CENTER); 
zidongbofangDialog.getWindow().setLayout( 
android.view.WindowManager.LayoutParams.FILL_PARENT, 
android.view.WindowManager.LayoutParams.WRAP_CONTENT); 
zidongbofangDialog.getWindow().setContentView(R.layout.manhua_dialog_zidongbofang);


第三种:
/**
* 自定义AlertDialog
*
* @author chenjianli 2011-05-10
*/
如果我们setView(),中的View是带EditText的,此时,我们必须在show()之前加上这么一句话,才可以在点击EditText时弹出键盘,否则将很杯具!键盘是弹不出来的。
AlertDialog tiaozhuanDialog= new AlertDialog.Builder(ManHuaActivity.this).create(); 
tiaozhuanDialog.setView(getLayoutInflater().inflate(R.layout.manhua_dialog_tiaozhuan, null)); 
tiaozhuanDialog.show(); 
tiaozhuanDialog.getWindow().setGravity(Gravity.CENTER); 
tiaozhuanDialog.getWindow().setLayout( 
android.view.WindowManager.LayoutParams.FILL_PARENT, 
android.view.WindowManager.LayoutParams.WRAP_CONTENT); 
tiaozhuanDialog.getWindow().setContentView(getLayoutInflater().inflate(R.layout.manhua_dialog_tiaozhuan, null));


这里还有一个地方需要注意一下,如果我们在show这个AlertDialog之前,需要设置该AlertDialog显示的View中的EditText的内容,则我们应该这么去findViewById():
EditText editText = (EditText)tiaozhuanDialog.findViewById(R.id.myEditText); 
editText.setText("Who are you ? I am android Developer ");

否则会报ERROR/AndroidRuntime(1032): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.错误!!
分享到:
评论

相关推荐

    Android 自定义 AlertDialog

    在设计自定义AlertDialog时,应考虑到不同屏幕尺寸和方向的影响,确保布局在各种设备上都能正常显示。可以使用约束布局(ConstraintLayout)或相对布局(RelativeLayout)等来实现响应式设计。 总之,自定义Android...

    自定义AlertDialog布局

    默认的`AlertDialog`样式有时无法满足开发者对于界面定制的需求,因此我们常常需要自定义其布局来实现更丰富的功能和更美观的界面。下面将详细讲解如何自定义`AlertDialog`的布局。 首先,自定义`AlertDialog`布局...

    自定义 Android 对话框 (AlertDialog) 的实现

    你可以根据自己的需求添加各种组件,并使用Android的属性来设置它们的颜色、大小和位置。 ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical...

    Android例子源码HerilyAlertDialog完全自定义的Dialog

    在Android开发中,自定义Dialog是一种常见的需求,它允许开发者根据应用的设计风格和功能需求创建独特的对话框。本文将深入探讨如何使用Android源码来实现一个名为HerilyAlertDialog的完全自定义Dialog。这个例子...

    AlertDialog

    `PopupWindow`是另一种轻量级的弹出组件,它可以显示在屏幕任意位置,并且可以自定义大小和形状。有时我们需要在`AlertDialog`中使用`PopupWindow`来实现更复杂的交互,例如下拉菜单或滑动选择器。以下是一个简单的...

    Android中实现Iphone样式的AlertDialog.rar

    这样,无论设备的屏幕大小如何,对话框都能保持良好的显示效果。 8. **考虑兼容性** 在实现过程中,要考虑到不同Android版本的兼容性问题。使用支持库(如AppCompat库)可以帮助确保在旧版本Android上的正常运行。...

    安卓Android源码——安卓Android中实现Iphone样式的AlertDialog.rar

    默认的Android AlertDialog样式可能与iOS的设计有所不同,因此,为了让Android应用看起来更接近iOS,开发者有时会自定义AlertDialog的样式。以下是一些关键的知识点: 1. **自定义布局**: 要实现类似iPhone的...

    android自定义dialog+listview自适应屏幕显示.zip

    本项目“android自定义dialog+listview自适应屏幕显示”主要关注这两个方面的实现,确保界面在不同屏幕尺寸和分辨率下都能良好展示。下面我们将深入探讨相关知识点。 首先,我们来讨论自定义Dialog。在Android原生...

    Android AlertDialog自定义样式实现代码

    首先,我们来看一下如何使用代码创建一个带自定义样式的`AlertDialog`。关键在于使用`AlertDialog.Builder`的构造函数,传入一个`ContextThemeWrapper`对象,并指定自定义的主题资源ID。这样,`AlertDialog`就会使用...

    安卓Andriod源码——中实现Iphone样式的AlertDialog.zip

    默认的Android AlertDialog样式与iOS的样式有明显的不同,例如按钮布局、圆角和整体设计。要实现类似iOS的风格,我们需要自定义AlertDialog的布局和样式。 1. **自定义布局**: - 创建一个新的XML布局文件,用于...

    Android高级应用源码-Android中实现Iphone样式的AlertDialog.rar

    这可能需要适配横屏模式,或者根据屏幕大小动态调整对话框的大小和布局。 7. **测试与优化**:最后,进行充分的测试,确保在各种设备和Android版本上都能正常工作。优化性能,避免内存泄漏和不必要的资源消耗。 这...

    Android应用源码之Android中实现Iphone样式的AlertDialog_实现.zip

    3. **设置样式**:为了进一步模仿iOS的外观,你可能需要自定义AlertDialog的主题。在AndroidManifest.xml中,或者在Activity的onCreate()方法中,你可以设置`android:theme`属性来应用一个自定义主题。在styles.xml...

    应用源码之alertDialog.zip

    通过修改主题或者使用自定义布局文件,开发者可以自定义`AlertDialog`的颜色、字体大小、背景等视觉效果。在`AndroidManifest.xml`中声明主题或者在创建`Builder`时传入自定义主题即可。 7. **`AlertDialog`与`...

    android 可自定义大小和位置的Dialog

    通常,Dialog会按照系统默认的样式和位置显示,但有时为了满足特定的UI设计需求,我们可能需要自定义Dialog的大小和位置。本篇文章将深入探讨如何创建一个可自定义大小和位置的Dialog,基于提供的标题"android 可...

    自定义Dialog的各种样式,包括自定义视图、PopupWindow

    自定义视图使你可以完全控制窗口的布局和设计,而PopupWindow则提供了更大的灵活性,可以根据需要调整其大小、位置和显示效果。在实际项目中,结合这两者,可以创造出各种独特的交互体验,提升应用的用户满意度。

    Android应用源码之自定义弹出窗口的实现

    8. **主题和样式**: 自定义弹出窗口的外观可以通过定义主题和样式来实现。在`res/values/styles.xml`文件中可以创建新的主题,然后在`DialogFragment`或`AlertDialog.Builder`中应用。 9. **事件响应**: 弹出窗口中...

    Android应用源码之Android中实现Iphone样式的AlertDialog.zip

    可能需要对布局进行响应式设计,以适应不同的屏幕大小。 7. **测试和调试**:在真实设备或模拟器上进行测试,确保对话框的行为和视觉效果与预期一致。对于可能出现的问题,如按钮点击事件不正确或布局显示异常,...

    自定义单选,多选对话框(android)

    PopupWindow则更加灵活,它可以在屏幕的任何位置显示,并且可以自定义大小和显示效果。 自定义单选对话框通常涉及到RadioGroup和RadioButton组件。RadioGroup是一个包含多个RadioButton的容器,用于实现单选功能。...

    Android自定义对话框Dialog(界面美化)

    在Android开发中,自定义对话框(Dialog)是提升用户体验的重要手段之一,它允许开发者根据应用的风格和需求创建独特且吸引人的交互界面。本文将深入探讨如何在Android中实现自定义对话框,并进行界面美化。 首先,...

    Android指定位置和大小的自定义dialog

    首先,我们要明白,Android系统默认的Dialog是按照预设样式和位置显示的,但通过自定义DialogFragment或直接自定义布局,我们可以改变其外观和位置。以下是一些关键步骤: 1. **创建自定义DialogFragment** 首先,...

Global site tag (gtag.js) - Google Analytics