Dialog基本使用

基础

动画

        通过android:windowEnterAnimationandroid: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

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() {
				//使进度条每次都增加1
				dialog.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.LayoutParams
				lp.width = 300;//单位dp
				lp.height = LayoutParams.WRAP_CONTENT;
				dialog.setContentView(content, lp);
				dialog.show();
       其中的LayoutParams是WindowManager的内部类。











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值