Android中Dialog的简单使用

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();
}

这里写图片描述


猜你喜欢

转载自blog.csdn.net/qq_41671794/article/details/80719216