`
uule
  • 浏览: 6352522 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

Android中Dialog

 
阅读更多

 当你希望显示一个对话框时, 调用showDialog(int)并将对话框的id传给它.
  当一个对话框第一次被请求时,Android调用onCreateDialog(int). 这里是你初始化对话框的地方. 这个回调函数传入的id和showDialog(int)相同. 创建对话框之后,将返回被创建的对象.
  在对话框被显示之前,Android还会调用onPrepareDialog(int, Dialog). 如果你希望每次显示对话框时有动态更改的内容, 那么就改写这个函数. 该函数在每次一个对话框打开时都调用. 如果你不定义该函数,则对话框每次打开都是一样的. 该函数也会传入对话框的id以及你在onCreateDialog()中创建的Dialog对象.
  最好的定义onCreateDialog(int) 和onPrepareDialog(int, Dialog) 的方法就是使用一个switch语句来检查传入的id. 每个case创建相应的对话框.

一个对话框总是被创建和显示为一个Activity的一部分. 你应该在Activity的onCreateDialog(int)中创建对话框. 当你使用这个回调函数时,Android系统自动管理每个对话框的状态并将它们和Activity连接, 将Activity变为对话框的"所有者". 这样,每个对话框从Activity继承一些属性. 例如,当一个对话框打开时, MENU键会显示Activity的菜单, 音量键会调整Activity当前使用的音频流的音量.
  注意: 如果你希望在onCreateDialog()方法之外创建对话框, 它将不会依附在Activity上. 你可以使用setOwnerActivity(Activity)来将它依附在Activity上.

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--
        定义一个名为 ary 的 string 类型的数组
    -->
    <string-array name="ary">
        <item>项目 1</item>
        <item>项目 2</item>
    </string-array>
</resources>

 

View.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <TextView android:text="我是一个 View!"
        android:layout_width="wrap_content" android:layout_height="wrap_content">
    </TextView>
    
    <TextView android:id="@+id/txtMsg2" android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </TextView>
    
</LinearLayout>
 
public class MainActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		AlertDialog dialog = new AlertDialog.Builder(this).setTitle("弹出对话框").create();
		//dialog.show();
		
		MyButtonClickListener listener = new MyButtonClickListener();
		Button btn1 = (Button) this.findViewById(R.id.btn1);
        btn1.setText("简单的对话框的 Demo");
        btn1.setOnClickListener(listener);

        Button btn2 = (Button) this.findViewById(R.id.btn2);
        btn2.setText("数据来自 xml");
        btn2.setOnClickListener(listener);

        Button btn4 = (Button) this.findViewById(R.id.btn4);
        btn4.setText("日期选择对话框");
        btn4.setOnClickListener(listener);

        Button btn5 = (Button) this.findViewById(R.id.btn5);
        btn5.setText("时间选择对话框");
        btn5.setOnClickListener(listener);

        Button btn6 = (Button) this.findViewById(R.id.btn6);
        btn6.setText("进度条对话框");
        btn6.setOnClickListener(listener);
		
        // 弹出对话框为指定的 View 的 Demo,即自定义布局
		Button toastButton = (Button)findViewById(R.id.toast);
		toastButton.setText("以一个View作为Toast");
		toastButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				View view = inflateView(R.layout.view);
				TextView text = (TextView) view.findViewById(R.id.txtMsg2);
				text.setText("View Text");
				Toast t = new Toast(MainActivity.this);
				t.setDuration(Toast.LENGTH_SHORT);
				t.setView(view);
				t.show();
			}
		});	
		
	}

	// 将指定的 xml 资源转换为一个 View
    private View inflateView(int resource) {
        LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        return vi.inflate(resource, null);
    }
    
	class MyButtonClickListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			// 具体的对话框的实现可以通过重写 onCreateDialog 完成
            switch (v.getId()) {
	            case R.id.btn1:
	                showDialog(0);
	                break;
	            case R.id.btn2:
	                showDialog(1);
	                break;
	            case R.id.btn4:
	                showDialog(3);
	                break;
	            case R.id.btn5:
	                showDialog(4);
	                break;
	            case R.id.btn6:
	                showDialog(5);
	                break;
            }
		}
		
	}

	@Override
	protected Dialog onCreateDialog(int id) {
		switch(id){
			case 0:
				return new AlertDialog.Builder(this).setTitle("这是一个简单的弹出对话框的 Demo").create();
			case 1:
				return new AlertDialog.Builder(this)
						.setTitle("标题1")
						.setIcon(R.drawable.setting)
						.setPositiveButton("确定", new DialogInterface.OnClickListener(){ 
							// // 设置弹框的确认按钮所显示的文本,以及单击按钮后的响应行为
							public void onClick(DialogInterface dialog,int a1){
								TextView msg = (TextView) findViewById(R.id.txtMsg);
								msg.setText("单击了对话框上的“确认”按钮\n");
								//msg.append("单击了对话框上的“确认”按钮\n");
								dialog.dismiss();
								//MainActivity.this.finish();
							}
						})
						.setNegativeButton("取消", new DialogInterface.OnClickListener() {
							@Override
							public void onClick(DialogInterface dialog, int which) {
								dialog.dismiss();
							}
						})
						.setNeutralButton("一般", new DialogInterface.OnClickListener() {
							@Override
							public void onClick(DialogInterface dialog, int which) {
								Toast.makeText(MainActivity.this, "第三个按钮", Toast.LENGTH_SHORT).show();
								dialog.dismiss();
							}
						})
						//.setMessage("确认退出吗?")
						//.setView(new EditText(this))
						//.setMultiChoiceItems(new String[]{"item1","item2"}, null,null)
						.setSingleChoiceItems(new String[]{"single1","single2"}, 0, new DialogInterface.OnClickListener() {
							
							@Override
							public void onClick(DialogInterface dialog, int which) {
								dialog.dismiss();
							}
						})
						// 弹框所显示的内容来自一个数组。数组中的数据会一行一行地依次排列
						/*.setItems(R.array.ary,
							new DialogInterface.OnClickListener() { 
								public void onClick(DialogInterface dialog,
										int which) {
								}
							})*/
						.create();
			case 3:
				Calendar c = Calendar.getInstance();
				return new DatePickerDialog(this, new OnDateSetListener() {
					public void onDateSet(DatePicker view, int year, int monthOfYear,
							int dayOfMonth) {
						TextView v = (TextView) findViewById(R.id.txtMsg);
						v.append("新设置的日期为:" + String.valueOf(year) + "-"
	                            + String.valueOf(monthOfYear) + "-"
	                            + String.valueOf(dayOfMonth) + "\n");
						
					}
				}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE));
			case 4:
	            // 弹出时间选择对话框
	            Calendar c2 = Calendar.getInstance();
	            return new TimePickerDialog(this, new OnTimeSetListener() {
	                @Override
	                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
	                    TextView txtMsg = (TextView) findViewById(R.id.txtMsg);
	                    txtMsg.append("新设置的时间为:" 
	                            + String.valueOf(hourOfDay) + ":"
	                            + String.valueOf(minute) + "\n");
	                }

	            }, c2.get(Calendar.HOUR), c2.get(Calendar.MINUTE), true);

	        case 5:
	            // 弹出进度条对话框
	            ProgressDialog progress = new ProgressDialog(this);
	            progress.setMessage("loading...");
	            return progress;

	        default:
	            return null;
						
		}
	}

}

 

按钮界面:

效果:

 




 

 

 

 

 

 

  • 大小: 169.1 KB
  • 大小: 82.4 KB
  • 大小: 101.2 KB
  • 大小: 78.1 KB
  • 大小: 105.4 KB
分享到:
评论

相关推荐

    Android中Dialog从底部划入

    在Android开发中,Dialog是一种非常重要的UI组件,用于在用户界面中显示临时信息或与用户进行交互。"Android中Dialog从底部划入"这个话题主要关注如何实现一个自定义的Dialog,使其从屏幕底部动画滑出,提升用户体验...

    Android中dialog常用样式

    在Android应用开发中,Dialog是一种重要的用户交互组件,它用于显示临时信息或向用户征求简短的确认或选择。在日常开发中,我们经常会遇到各种类型的对话框需求,如警告、确认、信息提示等。本资源集合了Android中...

    android中dialog点击按钮不消失详解

    在调用dialog的时候得到dialog对象,加入资料中代码,可以控制dialog的按钮在什么时候消失,而不是系统默认的点击消失

    很好android自定义dialog加载转圈等待,适合初学,透明+正常两种主题

    在Dialog中通过AnimationDrawable或ObjectAnimator来启动这个动画。 在代码中实例化并展示自定义DialogFragment时,可以通过`newInstance()`方法传递参数,如主题类型(透明或正常),然后在DialogFragment内部根据...

    详解Android中Dialog的使用

    在Android开发中,Dialog是一种常见的用户交互元素,用于展示临时信息或者进行简单的用户操作确认。本文将详细解析如何在Android中使用Dialog,并提供一些实用的实践技巧。 首先,最基本的Dialog类型是AlertDialog...

    Android中Dialog使用详解

    在Android开发中,Dialog是一种非常重要的组件,它用于在用户界面之上显示临时的窗口,通常用来提示用户一些信息或者请求用户的确认操作。本篇将详细讲解如何在Android中使用AlertDialog,以及相关的知识点。 首先...

    android dialog输入框获取数据

    首先,我们需要创建一个XML布局文件,该文件将定义Dialog中的控件及其样式。示例代码如下: ```xml &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" ...

    Android自定义dialogDemo

    - 不要在Dialog中执行耗时的操作,以免阻塞主线程。 - 对于重要的对话,考虑使用`AlertDialog`而不是普通的`Dialog`,因为`AlertDialog`提供了更好的默认样式和行为。 综上所述,`Android自定义dialogDemo`涵盖了...

    android 自定义dialog和activity跳转的样式

    在Android开发中,自定义Dialog和Activity的跳转样式是提升用户体验和应用独特性的重要手段。自定义Dialog可以使应用程序在提示用户信息或者进行选择时,展现出更符合应用风格的界面,而自定义Activity跳转样式则能...

    android中dialog用法集合

    在Android开发中,Dialog是一种非常常见的UI组件,用于向用户展示一些临时性的信息或需要用户进行选择的操作。本文将详细讲解如何在Android中使用Dialog,包括各种类型对话框的创建和自定义。 首先,我们来看如何...

    Android中Dialog去黑边的方法

    本文实例展示了Android中Dialog去黑边的方法。并且分为保留阴影与不保留阴影两种实现方法。供大家参考借鉴。具体实现方法如下: 1.不保留阴影 代码如下: &lt;?xml version=1.0 encoding=utf-8?&gt; &lt;style ...

    Android Dialog中加载GIF

    在Android开发中,有时我们需要在Dialog中展示动态内容,如GIF动图,来提供更丰富的用户交互体验。本文将详细讲解如何在Android Dialog中利用Glide库加载并播放GIF。 首先,Glide是一个非常流行的Android图片加载库...

    Android对话框Dialog详细代码

    在Android开发中,Dialog是一种非常重要的用户界面组件,它用于在主界面之上显示临时信息或者进行用户交互。本文将深入探讨如何在Android中创建和使用各种类型的Dialog,并提供详细的代码示例。 首先,我们从最基本...

    各种android弹出dialog效果以及各种dialog样式

    各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果...

    android中Dialog

    在Android开发中,`Dialog`是一个非常重要的组件,它用于在主界面之上显示一个半透明的弹出窗口,用于向用户展示信息、进行交互或请求确认。本篇将深入探讨`Dialog`在Android中的应用、自定义以及相关知识点。 ### ...

    Android-dialog库可以在任意类内调用子线程或ui线程内均可显示

    在Android应用开发中,对话框(Dialog)是一种常见的用户交互元素,用于向用户展示临时信息、请求确认或者提供选项。标题提到的“Android-dialog库”是Android开发中的一个第三方库,它提供了一种灵活的方式,使得...

    Android自定义Dialog多选对话框(Dialog+Listview+CheckBox)

    在Android开发中,自定义Dialog是一种常见的需求,用于提供一种轻量级的用户交互界面,如提示信息或者进行选择操作。本示例是关于如何创建一个具有多选功能的Dialog,结合了Dialog、ListView和CheckBox的使用。下面...

    Android Dialog全屏显示、动画显示

    // 获取相机拍摄的照片,可以在这里显示在全屏Dialog中 } } ``` 对于图片选择,可以使用类似的方式启动图库Intent: ```java Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media....

    Android 控制关闭Dialog

    在Android开发中,Dialog是一种常见的用户交互元素,用于在用户界面中显示临时信息或进行简单的交互操作。通常,当我们使用AlertDialog构建一个对话框时,它的默认行为是在用户点击按钮(如"确定"或"取消")后自动...

    Android 底部弹出dialog+动画

    在Android开发中,底部弹出Dialog是一种常见的交互方式,它用于显示临时信息或者提供用户一些简短的操作选项。本文将详细讲解如何实现一个带有动画效果的底部弹出Dialog,并通过具体的代码实例进行演示。 首先,...

Global site tag (gtag.js) - Google Analytics