Android——基本控件(下)(十五)

news2024/11/16 7:39:35

1. 对话框:Dialog

1.1 知识点

(1)掌握对话框的主要作用;

(2)可以使用AlertDialog和AlertDialog.Builder进行对话框的建立;

(3)可以通过LayoutInflater进行定制对话框的实现;

(4)可以定义日期对话框、时间对话框、进度对话框的操作。

1.2 具体内容

 通过此类的继承关系发现,Dialog并不是View类的子类,所以不能再布局文件中编写Dialog这个组件,那么就必须要写在Activity程序中。

通过API观察发现,Dialog这个类多个子类,这些子类就是实现的对话框的形式不一样而已。

AlertDiglog 和 AlertDialog.Bulider 这两个类:

Alert是警告的意思,所以AlertDialog表示的是一种警告框,主要就是弹出一些警告的信息。

 

发现AlertDialog是Dialog的子类,所以可以使用Dialog所有的(非私有)方法,通过API可以发现,AlertDialog这个类的构造方法都是propected修饰的,表示此类的构造方法只能有此类、此类的子类、同一个包中的类去调用。所以我们没有办法去使用此类的构造方法构造此类对象。那么现在问题来了:现在想要在自己写的程序中实例化一个AlertDialog对象,就必须要去使用到AlertDialog.Bulider这个类完成,通过AlertDialog.Bulider这个类的名称就可以知道,就是一个专门用于创建警告框的类。

 

 

public class DialogActivity extends Activity {
	private Dialog dialog = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dialog);
		this.dialog = new AlertDialog.Builder(this).create();//创建Dialog对象
	}
}

 现在程序就是创建了一个对话框,而此对话框没有任何内容,那么下面我们就进行内容填充。

public class DialogActivity extends Activity {
	private Dialog dialog = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dialog);
		this.dialog = new AlertDialog.Builder(this)
		.setTitle("对话框")
		.setIcon(R.drawable.logo)
		.setMessage("这是一个对话框")
		.create();//创建Dialog对象
		this.dialog.show();//显示对话框
	}
}

此时一个对话框就创建好了,在以后我们的很多项目中,都需要使用对话框,比如,在删除一笔数据的时候,需要一个信息提示框,这样可以防止用户误操作。让用户确认是否删除也是使用对话框实现的,但是这种对话框肯定需要添加按钮。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class DialogActivity extends Activity {
	private Dialog dialog = null;
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				DialogActivity.this.dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("确认删除?")
				.setIcon(R.drawable.exit)
				.setMessage("您确定要删除此笔数据?")
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						//确认之后需要做的事情
					}
				}).setNeutralButton("查看详情", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						//查看详情所需要做的事情
					}
				}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						//取消操作
					}
				})
				.create();//创建Dialog对象
				DialogActivity.this.dialog.show();//显示对话框
			}
		});
		
	}
}

现在我们只是简单的将画面给编写出来,但是后期我们肯定需要根据业务需求加入事件操作。

 

在许多程序中,都可以让用户实现退出的功能,而所有的退出程序一般都会有一个确认框,在退出的时候调用会让用户去选择是否退出。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ImageButton
        android:id="@+id/but"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/exit" />
</LinearLayout>

 现在布局已经完成,主要就是在Activity程序中编写一个对话框以确认是否退出,另外还有一个关键就是程序到底是什么时候才退出呢?可以直接利用Activity类中所提供的finish()完成程序退出。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class DialogActivity extends Activity {
	private Dialog dialog = null;
	private ImageButton but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dialog);
		this.but = (ImageButton) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				DialogActivity.this.dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("确认退出?")
				.setIcon(R.drawable.exit)
				.setMessage("您确定要退出此程序吗?")
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						//确认之后需要做的事情
						DialogActivity.this.finish();//表示退出程序
					}
				}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						//取消操作
					}
				})
				.create();//创建Dialog对象
				DialogActivity.this.dialog.show();//显示对话框
			}
		});
		
	}
}

相信很多同学在使用手机的时候,直接按返回键也能完成退出程序的功能,再次我们通过按返回键弹出确认退出对话框。如果这个时候相对按键进行监听,我们只需要覆写一个操作方法,对按键进行监听。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class DialogActivity extends Activity {
	private Dialog dialog = null;
	private ImageButton but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dialog);
		this.but = (ImageButton) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				DialogActivity.this.extiDialog();//调用弹出对话框的方法
			}
		});
	}
	/**
	 * @param keyCode 按下的是哪个键
	 * @param event
	 */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		//此处需要进行判断按下的是否是返回键
		if(keyCode == KeyEvent.KEYCODE_BACK){
			this.extiDialog();
		}
		return false;//表示继续执行
	}
	/**
	 * 弹出退出对话框并进行监听操作
	 */
	public void extiDialog(){
		DialogActivity.this.dialog = new AlertDialog.Builder(DialogActivity.this)
		.setTitle("确认退出?")
		.setIcon(R.drawable.exit)
		.setMessage("您确定要退出此程序吗?")
		.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				//确认之后需要做的事情
				DialogActivity.this.finish();//表示退出程序
			}
		}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				//取消操作
			}
		})
		.create();//创建Dialog对象
		DialogActivity.this.dialog.show();//显示对话框
	}
}

对话框列表:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <Button
        android:id="@+id/but"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请选择你喜欢的水果" />
    <TextView 
        android:id="@+id/mytext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

 布局已经编写,关键就是Activity程序中定义我们列表对话框。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	private TextView mytext = null;
	private String fruitData[] = {"苹果","西瓜","水蜜桃"};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.mytext = (TextView) super.findViewById(R.id.mytext); 
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("请选择您喜欢的水果")
				.setIcon(R.drawable.logo)
				.setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						
					}
				}).setItems(DialogActivity.this.fruitData,  new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						String fruit = fruitData[which];
						DialogActivity.this.mytext.setText("您喜欢的水果为:" + fruit);
					}
				}).create();
				dialog.show();//显示对话框
			}
		});
	}
}

现在的程序是通过硬编码完成的,如果不希望内容以硬编码的方式出现,我们可以将水果信息配置到一个单独的文件中,就是之前所说的资源文件。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="friut">
        <item>苹果</item>
        <item>西瓜</item>
        <item>水蜜桃</item>
    </string-array>
</resources>

现在是需要简单的修改一下Activity程序。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	private TextView mytext = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.mytext = (TextView) super.findViewById(R.id.mytext); 
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("请选择您喜欢的水果")
				.setIcon(R.drawable.logo)
				.setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						DialogActivity.this.mytext.setText("");//情况内容
					}
				}).setItems(R.array.friut,  new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						String fruit = DialogActivity.this.getResources().getStringArray(R.array.friut)[which];//从资源文件中读取选中的内容
						DialogActivity.this.mytext.setText("您喜欢的水果为:" + fruit);
					}
				}).create();
				dialog.show();//显示对话框
			}
		});
	}
}

现在我们已经通过配置文件进行最终的显示效果,列表信息完成了之后,我们现在来研究一下如何实现单选钮对话框。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	private TextView mytext = null;
	private String fruitData[] = {"苹果","西瓜","水蜜桃"};
	private int index = 1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.mytext = (TextView) super.findViewById(R.id.mytext); 
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("请选择您喜欢的水果")
				.setIcon(R.drawable.logo)
				.setPositiveButton("确认",  new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
					
					}
					//DialogActivity.this.index 表示默认的选中项
				}).setSingleChoiceItems(DialogActivity.this.fruitData, DialogActivity.this.index, new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						String fruit = fruitData[which];
						DialogActivity.this.mytext.setText("您喜欢的水果为:" + fruit);
						DialogActivity.this.index = which;//保存我们已选中的项
					}
				}).create();
				dialog.show();//显示对话框
			}
		});
	}
}

 此程序虽然已经实现了单选,但是无论如何还是需要点击确认或者取消按钮才能回到主屏幕。那么不如在点击确认之后再更新主屏幕信息。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	private TextView mytext = null;
	private String fruitData[] = {"苹果","西瓜","水蜜桃"};
	private int index = 1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.mytext = (TextView) super.findViewById(R.id.mytext); 
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("请选择您喜欢的水果")
				.setIcon(R.drawable.logo)
				.setPositiveButton("确认",  new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						String fruit = fruitData[DialogActivity.this.index];
						DialogActivity.this.mytext.setText("您喜欢的水果为:" + fruit);
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
					
					}
					//DialogActivity.this.index 表示默认的选中项
				}).setSingleChoiceItems(DialogActivity.this.fruitData, DialogActivity.this.index, new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						DialogActivity.this.index = which;//保存我们已选中的项
					}
				}).create();
				dialog.show();//显示对话框
			}
		});
	}
}

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	private TextView mytext = null;
	private String fruitData[] = {"苹果","西瓜","水蜜桃"};
	private boolean flag[] = {false,false,false};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.mytext = (TextView) super.findViewById(R.id.mytext); 
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("请选择您喜欢的水果")
				.setIcon(R.drawable.logo)
				.setPositiveButton("确认",  new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						StringBuffer sb = new StringBuffer();//这也是一个字符串
						for (int i = 0; i < flag.length; i++) {
							if(flag[i]){
								sb.append(fruitData[i]+",");
							}
						}
						DialogActivity.this.mytext.setText("您喜欢的水果为:" + sb.toString());
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
					
					}
					//参数1为一个显示内容数组,参数2 位 一个 boolean数组,长度和参数1的数组长度相同,表示选中的为那些
				}).setMultiChoiceItems(DialogActivity.this.fruitData, flag, new DialogInterface.OnMultiChoiceClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which, boolean isChecked) {
						if(isChecked){
							flag[which] = true;
						}else{
							flag[which] = false;
						}
					}
				}).create();
				dialog.show();//显示对话框
			}
		});
	}
}

 对话框所实现的功能都是比较基础的,不管如何变化,都是使用AlertDialog.Bulider这个类完成创建的。

 

登录的布局: 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/loginlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="用户名:" />
        <EditText
            android:id="@+id/username"
            android:layout_width="200px"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密      码:" />
        <EditText
            android:id="@+id/password"
            android:layout_width="200px"
            android:layout_height="wrap_content"
            android:password="true" />
    </LinearLayout>
</LinearLayout>

登录布局已经完成,现在主要是进行Activity程序编写。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				//实例化LayoutInflater对象
				LayoutInflater flater = LayoutInflater.from(DialogActivity.this);
				//将布局转换成一个组件
				View view = flater.inflate(R.layout.login, null);
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("用户登陆")
				.setIcon(R.drawable.logo)
				.setPositiveButton("登陆", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
					}
				}).setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						
					}
				}).setView(view)//将组件放入到对话框
				.create();
				dialog.show();
			}
		});
	}
}

日期对话框:

 

package com.example.dialogproject;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				DatePickerDialog dialog = new DatePickerDialog(DialogActivity.this,new DatePickerDialog.OnDateSetListener() {
					@Override
					public void onDateSet(DatePicker view, int year, int monthOfYear,
							int dayOfMonth) {
						
					}
				},1988,11,12);
				dialog.updateDate(2008, 7, 8);//修改时间
				dialog.show();
			}
		});
	}
}

 时间对话框:

 

package com.example.dialogproject;

import android.app.Activity;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TimePicker;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				TimePickerDialog dialog = new TimePickerDialog(DialogActivity.this,new TimePickerDialog.OnTimeSetListener() {
					@Override
					public void onTimeSet(TimePicker view, int hourOfDay,
							int minute) {
					}
				},18,20,true);
				dialog.show();
			}
		});
	}
}

 进行对话框:

 

现在进度使用一个线程去控制。

package com.example.dialogproject;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				final Dialog dialog = ProgressDialog.show(DialogActivity.this, "搜索网络", "请耐心等待。。。");
				new Thread(){
					public void run(){
						try{
							Thread.sleep(3000);
						}catch(Exception e){
							e.printStackTrace();
						}finally{
							dialog.dismiss();
						}
					}
				}.start();
				dialog.show();
			}
		});
	}
}

 以上的程序只是完成了一个简单的操作,并不是最为严格的方式,只是做了一些基本的线程进行模拟,当然我们ProgressDialog除了使用静态的show方法之外,还可以使用构造方法实例化(一般不会去使用)。

package com.example.dialogproject;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				final ProgressDialog dialog = new ProgressDialog(DialogActivity.this);
				dialog.setTitle("搜索网络");
				dialog.setMessage("请耐心等待。。。");
				new Thread(){
					public void run(){
						try{
							Thread.sleep(3000);
						}catch(Exception e){
							e.printStackTrace();
						}finally{
							dialog.dismiss();
						}
					}
				}.start();
				dialog.show();
			}
		});
	}
}

默认情况下,都是环形进度,我们也可以设置水平进度。

package com.example.dialogproject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				final ProgressDialog dialog = new ProgressDialog(DialogActivity.this);
				dialog.setTitle("搜索网络");
				dialog.setMessage("请耐心等待。。。");
				dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置水平显示进度
				dialog.setMax(100);
				dialog.setProgress(30);
				dialog.setButton("后台处理", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						dialog.dismiss();
					}
				});
				dialog.setButton2("详细信息", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
					}
				});
				dialog.onStart();
				new Thread() {				// 线程对象
					public void run() {			// 线程主体方法
						for (int x = 0; x < 100; x++) {
							try {
								Thread.sleep(500);	// 休眠0.5秒
							} catch (InterruptedException e) {
								e.printStackTrace();
							}	// 进度条每次增长1
							dialog.incrementProgressBy(1);
						}
						dialog.dismiss();	// 关闭对话框
					}}.start();			// 线程启动

				dialog.show();
			}
		});
	}
}

1.3 小结

(1)对话框主要通过Activity程序生成,用于对用户的操作进行提示;

(2)对话框可以分为:普通对话框、日期对话框、时间对话框、进度对话框;

(3)对话框的显示组件也可以使用布局文件配置,但是需要通过LayoutInflater类完成转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端JavaScript入门-day02

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一.运算符 1.1 赋值运算符 1.2 一元运算符 自增运算符的用法&#xff1a; 1.3 比较运算符 比较运算符…

超越竞争,使用Framework技术赢得市场份额

Framework为什么这么重要&#xff1f; 在Android开发中&#xff0c;Framework&#xff08;框架&#xff09;是非常重要的&#xff0c;因为它提供了一套已经实现的软件组件和工具&#xff0c;以支持开发者构建应用程序。以下是Framework在Android开发中的重要性&#xff1a; 提…

云服务器到期,站点迁移,Nginx配置SSL以备后续只需!

导言 笔者小站&#xff1a;秋码分享 在这三年中&#xff0c;其实远不止这三年&#xff0c;可追溯到2014年前后&#xff0c;个人站点便逐渐走向末路。但却总有新的个人博客网站&#xff0c;在这片互联网海洋漂浮着&#xff0c;或许是为了心中的梦想&#xff0c;亦或是记录着工作…

Kafka 从安装到应用

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

MySQL实战解析底层---幻读是什么,幻读有什么问题?

目录 前言 幻读是什么&#xff1f; 幻读有什么问题&#xff1f; 如何解决幻读&#xff1f; 前言 为了便于说明问题&#xff0c;这一篇文章&#xff0c;就先使用一个小一点儿的表建表和初始化语句如下&#xff1a; 这个表除了主键id外&#xff0c;还有一个索引c&#xff0c…

web值控制标签的显示与隐藏、document、getElementById、style、css、hidden、display、visibility

文章目录 方式一方式二方式三visibility小结 方式一 使用HTML的hidden属性&#xff0c;隐藏后不占用原来的位置 hidden属性是一个Boolean类型的值&#xff0c;如果想要隐藏元素&#xff0c;就将值设置为true&#xff0c;否则就将值设置为false 选取id为test的元素 let test do…

“事后达尔文”—— 游戏业务效果评估方法实践

作者&#xff1a;vivo 互联网数据分析团队 Luo Yandong、Zhang Lingchao 本文介绍了互联网业务数据效果评估的几种常见问题及方法&#xff0c;并基于分层抽样的逻辑优化出一套可应用于解决用户不均匀的“事后达尔文"分析法&#xff0c;可适用于无法AB测试或人群不均匀的AB…

VCO的设计

理想振荡器只有电感和电容&#xff0c;会一直振荡下去。但是实际的振荡器存在一定的寄生电阻并联在RC两端&#xff0c;会使振幅变小。因此需要RC旁边再并联一个负电阻以此来抵消寄生电阻的影响。一般会选择负阻提供的能量为寄生电阻能量的的2-3倍。如果负阻跟RC并联&#xff0c…

剖析float相加产生精度损失的原因

float相加产生精度损失的原因 一、什么是float类型及其特点1.1、float类型的定义和使用方法1.2、float类型的特点&#xff0c;包括精度限制 二、为什么会出现float相加精度损失2.1、计算机二进制存储浮点数的方式2.2、浮点数运算中的舍入误差2.3、累加多个小数时的误差累积 三、…

kali中Metasploit基本使用方法

1.kali启动postgresql并设置开机自启动 systemctl start postgresql.servicesystemctl enable postgresql.service2.kali启动Metasploit 方式一:应用程序 -> 漏洞利用工具集 -> Metasploit framework 方式二: msfconsole 3. Metasploit常用命令 connect 命令 连接远程主…

Qt信号槽之connect介绍(上)

关于Qt信号槽中connect与disconnect介绍 首先我们要知道&#xff0c;如果想要使用Qt中的信号槽机制&#xff0c; 那么必须继承QObject类&#xff0c;因为QObject类中包含了信号槽的一系列操作&#xff0c;今天我们来讲解的是信号与槽怎么建立连接以及断开连接。 一、connect …

在windows server上用Mosquitto软件创建MQTT服务器

今天下午捣鼓了半天&#xff0c;在云服务器上面创建了个MQTT服务器&#xff0c;然后用MQTTX软件进行了测试。过程记录如下&#xff1a; 1、下载mosquitto软件&#xff0c;链接如下图&#xff1a; 2、下载完成后安装&#xff0c;一直点下一步下一步就好了。 3、在安装路径下&am…

快速捡回使用workbench控制mysql创建数据库的基本步凑

首先如果&#xff0c;不想要在原来已经建好的数据库下建立数据表&#xff0c;可以新建数据库。 具体操作步凑如下&#xff1a; 选择后如下所示&#xff1a; 有现成的创建代码的话&#xff0c;就直接复制执行现成的创建代码即可&#xff0c;如果没有现成的创建代码的话&#xff…

Java设计模式之单例模式-【懒汉式与饿汉式】

1、单例&#xff0c;模式 单例模式属于创建型模式的一种&#xff0c;应用于保证一个类仅有一个实例的场景下&#xff0c;并且提供了一个访问它的全局方法 单例模式的特点&#xff1a;从系统启动到终止&#xff0c;整个过程只会产生一个实例。单例模式常用写法&#xff1a;懒汉…

STM32设置为I2C从机模式

STM32设置为I2C从机模式 目录 STM32设置为I2C从机模式前言1 硬件连接2 软件编程3 运行测试3.1 I2C连续写入3.1 I2C连续读取3.1 I2C单次读写测试 4 总结 前言 STM32的I2C作为主机的情况相信很多同学都用过&#xff0c;网上也有很多教程&#xff0c;但是作为从设备使用的例子应该…

【C++ 程序设计】第 9 章:函数模板与类模板

目录 一、函数模板 &#xff08;1&#xff09;函数模板的概念 &#xff08;2&#xff09;函数模板的示例 &#xff08;3&#xff09;函数或函数模板调用语句的匹配顺序 二、类模板 &#xff08;1&#xff09;类模板概念 &#xff08;2&#xff09;类模板示例 &…

阵列模式综合第三部分:深度学习(附源码)

一、前言 这个例子展示了如何设计和训练卷积神经网络&#xff08;CNN&#xff09;来计算产生所需模式的元素权重。 二、介绍 模式合成是阵列处理中的一个重要课题。阵列权重有助于塑造传感器阵列的波束图案&#xff0c;以匹配所需图案。传统上&#xff0c;由于空间信号处理和频…

SSL工作原理

SSL 是一个安全协议&#xff0c;它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 超文本传输协议&#xff08;HTTP&#xff09;使用 SSL 来实现安全的通信。 在客户端与服务器间传输的数据是通过使用对称算法&#xff08;如 DES 或 RC4&#xff09;进行加密的。公…

使用ZenDAS进行Gompertz趋势分析

某项目做了18次测试&#xff0c;每次测试发现的缺陷个数如下表所示&#xff1a; 测试序号 发现缺陷数 1 60 2 96 3 157 4 191 5 155 6 106 7 64 8 335 9 92 10 196 11 109 12 133 13 166 14 129 15 16 16 30 17 19 18 5 对上述的数据在Z…

IPv6手工隧道配置与验证实验

IPv6手工隧道配置与验证实验 【实验目的】 熟悉IPv6手工隧道的概念。 掌握IPv6和IPv4共存的实现方法。 掌握IPv6手工隧道的配置。 验证配置。 【实验拓扑】 实验拓扑如下图所示。 实验拓扑 设备参数如表所示。 设备参数表 设备 接口 IPv6地址 子网掩码位数 默认网…