Dialog基本使用
基础
动画
通过android:windowEnterAnimation与android:windowExitAnimation可以定义dialog的动画。如下:
<style name="dialogAnimation"> <item name="android:windowEnterAnimation">@anim/dialog_enter</item> <item name="android:windowExitAnimation">@anim/anim_exit</item> </style>应用
Dialog d = new ProgressDialog(MainActivity.this); Window window = d.getWindow();//得到window params = (WindowManager.LayoutParams)window.getAttributes(); params.windowAnimations = R.style.dialogAnimation;//引用style文件的id
AlertDialog
它一般是用来提醒用户进行确认等操作的。如用户要删除一个信息,就需要提醒用户是否确定要删除。因此它叫“提醒对话框”。
创建与显示
是通过AlertDialog.Builder来完成的。如:
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.create().show();//或者直接builder.show()
AlertDialog.Builder:
大部分都是把用户传入的值设置到相应的位置上的。但是其中有两个是可以用来自定义:
setCustomTitle()设置对话框的标题。因此,如果想让标题中的文字居中,可以自定义一个布局,再把布局生成的view设置到其中即可.如:
builder.setCustomTitle(View.inflate(MainActivity.this,R.layout.second, null));
setView()是用来更改对话框的主体内容。
ProgressDialog
它是进度条对话框,因为在该对话框上含有一个进度条。因此,它主要是用来在执行一些耗时操作时显示的。如:删除信息时.
其中的进度条默认是圆形的。
示例:
final ProgressDialog dialog = new ProgressDialog(this);dialog.setMax(100);//为进度条设置最大值//将圆形有进度条改成横条状dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);dialog.show();final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();service.scheduleAtFixedRate(new Runnable() {public void run() {//使进度条每次都增加1dialog.incrementProgressBy(1);if (count == 100) {service.shutdown();dialog.dismiss();}count++;}}, 4000, 100, TimeUnit.MILLISECONDS);
也可以为ProgressDialog设置按钮:
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "12", new OnClickListener() {public void onClick(DialogInterface dialog, int which) {}});dialog.setButton(DialogInterface.BUTTON_POSITIVE, "fda", new OnClickListener() {public void onClick(DialogInterface dialog, int which) {}});
DatePickerDialog
选择时间的dialog。样式如下:
代码如下:
DatePickerDialog dialog = new DatePickerDialog(this, new OnDateSetListener() {public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {System.out.println("onDateSet");}//当点击下面的完成按钮时.monthOfYear是从0到11.超过11会顺延到下一年}, 2012, 11, 1);dialog.show();
TimePickerDialog
与DatePickerDialog显示的类似。只不过它是显示一天的时间。从参数就可以看出。示例如下:
TimePickerDialog dialog = new TimePickerDialog(this, new OnTimeSetListener() {public void onTimeSet(TimePicker view, int hourOfDay, int minute) {System.out.println('a'+"-----");}}, 13, 66, false);dialog.show();
自定义Dialog
虽然通过Builder中的setView与setCustomTitle()可以实现一定的自定义,但是这并不能完全实现自定义,如:要实现一个圆角的Dialog。
具体步骤:
1,new一个dialog,并在new的时候传入一个style。
2,用第一步得到的dialog调用setContentView()。
3,用第一步得到的dialog调用show()即可。
style文件
<style name="MyDialog" parent="@android:Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> </style>
其中:
android:windowBackground设置的便是dialog的背景。因此,可以为dialog设置任意背景。
示例
final Dialog dialog = new Dialog(MainActivity.this,R.style.MyDialog);View v2 = View.inflate(MainActivity.this, R.layout.dialog, null);v2.findViewById(R.id.dialog_button_cancel).setOnClickListener(new OnClickListener() {public void onClick(View v) {dialog.dismiss();}});dialog.setContentView(v2);dialog.show();
这样就自定义了一个dialog。这个dialog显示的内容就是R.layout.dialog所指定的。
常见问题
使用该方法自定义dialog时,会发现dialog的占据的位置过小。这可以通过设置LayoutParams来改变。如下:
Dialog dialog = new Dialog(MainActivity.this,R.style.DialogStyle);View content = View.inflate(MainActivity.this,R.layout.dialog_content, null);LayoutParams lp = new LayoutParams();//WindowManager.LayoutParamslp.width = 300;//单位dplp.height = LayoutParams.WRAP_CONTENT;dialog.setContentView(content, lp);dialog.show();其中的LayoutParams是WindowManager的内部类。
更多相关文章
- Android中的onCreateOptionsMenu()方法和onOptionsItemSelected()方
- Android 对话框中的进度条
- Android自定义对话框去掉白色边框
- 综合传感器示例
- Android 开发系列6 安装Cordova及示例程序
- 【Android】手机地图功能——利用手机GPS获取用户地理坐标
- 一个日期选择对话框