Android中Dialog的简单使用
首先先介绍一下对话框和Dialog:
对话框是提示用户作出决定或输入额外信息的小窗口,通常不会填充整个屏幕,用于进行一些额外交互;
而Dialog 类是对话框的基类,但应该避免直接实例化 Dialog,而应使用其子类;
例如:AlertDialog,DatePickerDialog 或 TimePickerDialog
这里列举几个常用的Dialog和使用方法
1.普通Dialog
//普通的AlertDialog对话框
findViewById(R.id.btn_common).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("我是一个普通的Dialog");
builder.setMessage("你要点哪一个按钮呢?");
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
toast("取消");
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
toast("确定");
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
});
2.全局Dialog
这里所说的全局Dialog是一个应用于优先级非常高的通知,就是当前应用无论是处于哪一个页面上,都需要弹出的Dialog来提示用户一些信息,可以用于紧急的通知和提醒。实现方法也不是很复杂,一般项目中我们都会通过一个类来管理我们的Activity,即AppManager,所以只要能获取到当前显示的Activity就行了,也就是栈顶的Activity,再封装一个BaseActivity类统一管理,给各个Activity继承,然后需要主页面或者主类(mainactivity)处理Dialog的显示问题,通过管理APP(AppManager)获取到当前栈顶的Activity,用于构造Dialog就行了。
/** * Activity管理类 * @author Donkor */
public class AppManager{
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager(){} /** * 单一实例 */
public static AppManager getAppManager(){
if(instance==null)
{
instance=new AppManager();
}
return instance;
} /** * 添加Activity到堆栈 */
public void addActivity(Activity activity)
{
if(activityStack==null)
{
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
} /** * 获取当前Activity(堆栈中最后一个压入的) */
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
} /** * 结束当前Activity(堆栈中最后一个压入的) */
public void finishActivity(){
Activity activity=activityStack.lastElement();
if(activity!=null)
{
activity.finish();
activity=null;
}
} /** * 结束指定的Activity */
public void finishActivity(Activity activity){
if(activity!=null)
{
activityStack.remove(activity);
activity.finish();
activity=null;
}
} /** * 结束指定类名的Activity */
public void finishActivity(Class<?> cls){
for (Activity activity : activityStack)
{
if(activity.getClass().equals(cls) )
{
finishActivity(activity);
}
}
} /** * 结束所有Activity */
public void finishAllActivity(){
for (int i = 0, size = activityStack.size(); i < size; i++)
{
if (null != activityStack.get(i))
{
activityStack.get(i).finish();
}
}
activityStack.clear();
} /** * 退出应用程序 */
public void AppExit(Context context){
try
{
finishAllActivity();
ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); activityMgr.restartPackage(context.getPackageName());
System.exit(0);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
/**封装一个BaseActivity类统一管理,给各个Activity继承*/
/** * Activity基类 * @author Donkor */
public abstract class BaseActivity extends AppCompatActivity {
@Override protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//将Activity实例添加到AppManager的堆栈
AppManager.getAppManager().addActivity(this);
}
@Override protected void onDestroy()
{
super.onDestroy();
//将Activity实例从AppManager的堆栈中移除
AppManager.getAppManager().finishActivity(this);
}
}
/**需要主页面或者主类(mainactivity)处理Dialog的显示问题,通过管理APP(AppManager)获取到当前栈顶的Activity,用于构造Dialog就行了*/
Dialog myDialog = new Dialog(AppManager.getAppManager().currentActivity(), R.style.dialog_style);
3.单选Dialog
int yourChoice;
private void showSingleChoiceDialog(){
final String[] items = { "我是1","我是2","我是3","我是4", };
yourChoice = -1;
AlertDialog.Builder singleChoiceDialog =
new AlertDialog.Builder(MainActivity.this);
singleChoiceDialog.setTitle("我是一个单选Dialog");
singleChoiceDialog.setSingleChoiceItems(items, 0,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
yourChoice = which;
}
});
singleChoiceDialog.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (yourChoice != -1) {
Toast.makeText(MainActivity.this,
"你选择了" + items[yourChoice],
Toast.LENGTH_SHORT).show();
}
}
});
singleChoiceDialog.show();
}
4.多选Dialog
ArrayList<Integer> yourChoices = new ArrayList<>();
private void showMultiChoiceDialog() {
final String[] items = { "我是1","我是2","我是3","我是4" };
final boolean initChoiceSets[]={false,false,false,false};// 设置默认选中的选项,全为false默认均未选中
yourChoices.clear();
AlertDialog.Builder multiChoiceDialog =
new AlertDialog.Builder(MainActivity.this);
multiChoiceDialog.setTitle("我是一个多选Dialog");
multiChoiceDialog.setMultiChoiceItems(items, initChoiceSets,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
if (isChecked) {
yourChoices.add(which);
} else {
yourChoices.remove(which);
}
}
});
multiChoiceDialog.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int size = yourChoices.size();
String str = "";
for (int i = 0; i < size; i++) {
str += items[yourChoices.get(i)] + " ";
}
Toast.makeText(MainActivity.this,
"你选中了" + str,
Toast.LENGTH_SHORT).show();
}
});
multiChoiceDialog.show();
5.列表Dialog
private void showListDialog() {
final String[] items = { "我是1","我是2","我是3","我是4" };
AlertDialog.Builder listDialog =
new AlertDialog.Builder(MainActivity.this);
listDialog.setTitle("我是一个列表Dialog");
listDialog.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// which 下标从0开始
// ...To-do
Toast.makeText(MainActivity.this,
"你点击了" + items[which],
Toast.LENGTH_SHORT).show();
}
});
listDialog.show();
}