`

【转】自定义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.错误!!
分享到:
评论
2 楼 ldci3gandroid 2011-11-29  
myxuee 写道
你好,第三种情况中,如何才能显示软键盘啊?
看不大明白…多谢了。

你就按我上面的代码写就行了
1 楼 myxuee 2011-11-17  
你好,第三种情况中,如何才能显示软键盘啊?
看不大明白…多谢了。

相关推荐

    Android 自定义 AlertDialog

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

    自定义AlertDialog布局

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

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

    在Android开发中,自定义对话框(AlertDialog)是常见的需求,它可以提供更加个性化的...在实际项目中,你可能还需要考虑对话框的动画效果、触摸反馈以及不同屏幕尺寸的适配等问题,确保对话框在各种设备上都能正常工作。

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

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

    AlertDialog

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

    Android中实现Iphone样式的AlertDialog.rar

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

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

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

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

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

    Android AlertDialog自定义样式实现代码

    在Android开发中,`AlertDialog`是系统提供的一种用于显示警告、确认或信息的对话框。默认情况下,`AlertDialog`的...记住,自定义样式时要考虑到不同设备和屏幕尺寸的适配,确保对话框在各种环境下都能有良好的表现。

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

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

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

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

    应用源码之alertDialog.zip

    通过分析和实践这个`alertDialog.zip`中的源码,开发者不仅可以掌握`AlertDialog`的基本用法,还能深入理解Android应用中如何优雅地处理用户交互。同时,结合其他标签如“毕业设计”和“代码学习”,这个源码可以...

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

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

    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自定义弹出框实现(修改版)完整实例源码

    Android SDK提供了多种预定义的Dialog样式,如AlertDialog、ProgressDialog等,但它们可能无法满足所有设计需求,因此我们需要自定义。 自定义弹出框的核心在于创建一个继承自Dialog或者DialogFragment的类。在这个...

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

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

    仿新浪的漂亮的自定义对话框

    此外,为了方便使用,这个库可能还提供了简单的API接口,让开发者可以通过几行代码就能轻松创建和展示自定义对话框。例如,设置对话框内容、标题、按钮回调函数等。 总之,"仿新浪的漂亮的自定义对话框"是一个为...

Global site tag (gtag.js) - Google Analytics