开发对话框Dialog的学习资料和dialog选中位置的问题
2017-05-10 15:49
483 查看
Android提供了丰富的
Dialog函数,本文介绍最常用的8种对话框的使用方法,包括普通(包含提示消息和按钮)、列表、单选、多选、等待、进度条、编辑、自定义等多种形式。1:普通
DialogAlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("普通对话框").setIcon(R.mipmap.ic_launcher).setMessage("你要点击的是哪个按键?").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Intent intent = new Intent(MainActivity.this, SecondActivity.class);startActivity(intent);showToast("确定");}}).setNegativeButton("取消", new DialogInterface.OnClic4000kListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {showToast("取消");}}).show();2:列表
Dialogfinal String[] mList = {"选项1", "选项2", "选项3", "选项4", "选项5", "选项6", "选项7"};AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("列表对话框").setIcon(R.mipmap.ic_launcher).setItems(mList, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {showToast(mList[which]);}}).show();3:单选
Dialogfinal AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);final String[] sex = {"男", "女", "性别未定"};builder.setTitle("单选对话框").setIcon(R.mipmap.ic_launcher).setSingleChoiceItems(sex, 0, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {chooseWhich = which;SharedPreferences sharedPreferences = getSharedPreferences("data", MODE_PRIVATE);SharedPreferences.Editor edit = sharedPreferences.edit();edit.putString("sex", sex[chooseWhich]);edit.apply();showToast(sex[chooseWhich]);}}).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {chooseWhich = which;SharedPreferences sharedPreferences = getSharedPreferences("data", MODE_PRIVATE);String data = sharedPreferences.getString("sex", "");et_main.setText(data);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {showToast("取消");}}).show();4:多选
DialogAlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);final String[] mList = {"选项1", "选项2", "选项3", "选项4", "选项5", "选项6", "选项7"};final boolean[] mLch = {false, false, false, false, false, false, false,};builder.setTitle("多选对话框").setIcon(R.mipmap.ic_launcher).setMultiChoiceItems(mList, mLch, new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {if (isChecked) {yourChoices.add(which);} else {yourChoices.remove(which);}}}).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {int size = yourChoices.size();String str = "";for (int i = 0; i < size; i++) {str += mList[yourChoices.get(i)];}showToast(str);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {showToast("取消");}}).show();5:等待
Dialogfinal ProgressDialog dialog = new ProgressDialog(MainActivity.this);dialog.setTitle("等待对话框");dialog.setCancelable(false);dialog.setMessage("等待中。。。。");dialog.setIndeterminate(false);dialog.show();new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}dialog.dismiss();}}).start();6:进度条
Dialogfinal ProgressDialog dialog = new ProgressDialog(MainActivity.this);dialog.setTitle("进度条话框");dialog.setProgress(0);dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);dialog.setMax(100);dialog.show();new Thread(new Runnable() {@Overridepublic void run() {int progress = 0;while (progress < 100) {try {Thread.sleep(100);progress++;dialog.setProgress(progress);} catch (InterruptedException e) {e.printStackTrace();}}dialog.cancel();}}).start();7:编辑
Dialogfinal EditText editText = new EditText(this);AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("编辑对话框");builder.setView(editText);builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String s= editText.getText().toString();et_main.setText(s);showToast(s);}});builder.show();8:自定义
Dialogfinal View view = View.inflate(MainActivity.this, R.layout.custom, null);AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("编辑对话框");builder.setView(view);builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {EditText user= (EditText) view.findViewById(R.id.et_user);EditText password= (EditText) view.findViewById(R.id.et_password);String s= user.getText().toString();String p= password.getText().toString();et_main.setText(s+p);}});builder.show();
WindowManager m = getWindowManager();Display d = m.getDefaultDisplay(); //为获取屏幕宽、高WindowManager.LayoutParams p = dialog.getWindow().getAttributes(); //获取对话框当前的参数值p.height = (int) (d.getHeight() * 0.5); //高度设置为屏幕的0.5p.width = (int) (d.getWidth() * 0.5); //宽度设置为屏幕的0.5dialog.getWindow().setAttributes(p);编辑dialog的框高。9:popupWindow
Dialogfinal View view = View.inflate(MainActivity.this, R.layout.custom, null);EditText user= (EditText) view.findViewById(R.id.et_user);EditText password= (EditText) view.findViewById(R.id.et_password);PopupWindow window =new PopupWindow(view, ActionBarOverlayLayout.LayoutParams.WRAP_CONTENT, ActionBarOverlayLayout.LayoutParams.WRAP_CONTENT);window.setFocusable(true);window.setOutsideTouchable(true);window.setBackgroundDrawable(new ColorDrawable(Color.WHITE));window.showAtLocation(view, Gravity.CENTER_VERTICAL,0,0);
10:MainActivity.java代码public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_normal1;private Button btn_normal2;private Button btn_list;private Button btn_choose;private Button btn_multi_choose;private Button btn_wait;private Button btn_progress;private Button btn_editor;private Button btn_custom;private Button btn_pop;private EditText et_main;private int chooseWhich = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setView();setListener();}private void setListener() {btn_normal1.setOnClickListener(this);btn_normal2.setOnClickListener(this);btn_list.setOnClickListener(this);btn_choose.setOnClickListener(this);btn_multi_choose.setOnClickListener(this);btn_wait.setOnClickListener(this);btn_progress.setOnClickListener(this);btn_editor.setOnClickListener(this);btn_custom.setOnClickListener(this);btn_pop.setOnClickListener(this);}private void setView() {btn_normal1 = (Button) findViewById(R.id.btn_normal1);btn_normal2 = (Button) findViewById(R.id.btn_normal2);btn_list = (Button) findViewById(R.id.btn_list);btn_choose = (Button) findViewById(R.id.btn_choose);btn_multi_choose = (Button) findViewById(R.id.btn_multi_choose);btn_wait = (Button) findViewById(R.id.btn_wait);btn_progress = (Button) findViewById(R.id.btn_progress);btn_editor = (Button) findViewById(R.id.btn_editor);btn_custom = (Button) findViewById(R.id.btn_custom);btn_pop = (Button) findViewById(R.id.btn_pop);et_main = (EditText) findViewById(R.id.et_main);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_normal1:showNormalDialog1();break;case R.id.btn_normal2:showNormalDialog2();break;case R.id.btn_list:showListDialog();break;case R.id.btn_choose://实验保存选中位置
//重点问题:dialog重复创建,选中的位置保存无效。
原因:每次点击时候,这要操作都会重复创建Alertdialog对象。
解决方法:首先在[单选]按键定义一个int类型参数保存选中的whitch,
再次在[确认]按键用SharedPreference
保存选中的whitch,重点是要用builder,create()
创建dialog对象,再用dialog去show();
//showChooseDialog();
if(dialog!=null){dialog.show();}else{dialog=bulider.create();dialog.show();}break;case R.id.btn_multi_choose:showMultiChooseDialog();break;case R.id.btn_wait:showPWaitDialog();break;case R.id.btn_progress:showProgressDialog();break;case R.id.btn_editor:showEditorDialog();break;case R.id.btn_custom:showCustomDialog();break;case R.id.btn_pop:shoePopDialog();break;}}//popUpWindowprivate void shoePopDialog() {final View view = View.inflate(MainActivity.this, R.layout.custom, null);EditText user= (EditText) view.findViewById(R.id.et_user);EditText password= (EditText) view.findViewById(R.id.et_password);PopupWindow window =new PopupWindow(view, ActionBarOverlayLayout.LayoutParams.WRAP_CONTENT, ActionBarOverlayLayout.LayoutParams.WRAP_CONTENT);window.setFocusable(true);window.setOutsideTouchable(true);window.setBackgroundDrawable(new ColorDrawable(Color.WHITE));window.showAtLocation(view, Gravity.CENTER_VERTICAL,0,0);}//自定义对话框private void showCustomDialog() {final View view = View.inflate(MainActivity.this, R.layout.custom, null);AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("编辑对话框");builder.setView(view);builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {EditText user= (EditText) view.findViewById(R.id.et_user);EditText password= (EditText) view.findViewById(R.id.et_password);String s= user.getText().toString();String p= password.getText().toString();et_main.setText(s+p);}});builder.show();}//编辑对话框private void showEditorDialog() {final EditText editText = new EditText(this);AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("编辑对话框");builder.setView(editText);builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String s= editText.getText().toString();et_main.setText(s);showToast(s);}});builder.show();}//进度条对话框private void showProgressDialog() {final ProgressDialog dialog = new ProgressDialog(MainActivity.this);dialog.setTitle("进度条话框");dialog.setProgress(0);dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);dialog.setMax(100);dialog.show();new Thread(new Runnable() {@Overridepublic void run() {int progress = 0;while (progress < 100) {try {Thread.sleep(100);progress++;dialog.setProgress(progress);} catch (InterruptedException e) {e.printStackTrace();}}dialog.cancel();}}).start();}//等待对话框private void showPWaitDialog() {final ProgressDialog dialog = new ProgressDialog(MainActivity.this);dialog.setTitle("等待对话框");dialog.setCancelable(false);dialog.setMessage("等待中。。。。");dialog.setIndeterminate(false);dialog.show();new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}dialog.dismiss();}}).start();}ArrayList<Integer> yourChoices = new ArrayList<>();//多选对话框private void showMultiChooseDialog() {AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);final String[] mList = {"选项1", "选项2", "选项3", "选项4", "选项5", "选项6", "选项7"};final boolean[] mLch = {false, false, false, false, false, false, false,};builder.setTitle("多选对话框").setIcon(R.mipmap.ic_launcher).setMultiChoiceItems(mList, mLch, new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {if (isChecked) {yourChoices.add(which);} else {yourChoices.remove(which);}}}).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {int size = yourChoices.size();String str = "";for (int i = 0; i < size; i++) {str += mList[yourChoices.get(i)];}showToast(str);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {showToast("取消");}}).show();}//单选对话框private void showChooseDialog() {final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);final String[] sex = {"男", "女", "性别未定"};builder.setTitle("单选对话框").setIcon(R.mipmap.ic_launcher).setSingleChoiceItems(sex, 0, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {chooseWhich = which;showToast(sex[chooseWhich]);}}).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {
SharedPreferences sharedPreferences = getSharedPreferences("data", MODE_PRIVATE);SharedPreferences.Editor edit = sharedPreferences.edit();edit.putString("sex", sex[chooseWhich]);
edit.putString("id", chooseWhich);edit.apply(); String data = sharedPreferences.getString("sex", ""); et_main.setText(data); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showToast("取消"); } }) .show(); } //列表对话框 private void showListDialog() { final String[] mList = {"选项1", "选项2", "选项3", "选项4", "选项5", "选项6", "选项7"}; AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("列表对话框") .setIcon(R.mipmap.ic_launcher) .setItems(mList, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showToast(mList[which]); } }) .show(); } private void showNormalDialog2() { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("普通对话框2") .setIcon(R.mipmap.ic_launcher) .setMessage("你要点击的是哪个按键?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); showToast("确定"); } }) .setNeutralButton("忽略", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showToast("忽略"); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showToast("取消"); } }) .show(); } //普通对话框1 private void showNormalDialog1() { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("普通对话框") .setIcon(R.mipmap.ic_launcher) .setMessage("你要点击的是哪个按键?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); showToast("确定"); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showToast("取消"); } }) .show(); } private void showToast(String msg) { Toast.makeText(MainActivity.this, "你点击的是+" + msg, Toast.LENGTH_SHORT).show(); }}activi_main:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.jet.speech.dialogdemo.MainActivity"><LinearLayoutandroid:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/btn_normal1"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="普通Dialog1" /><Buttonandroid:id="@+id/btn_normal2"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="普通Dialog2" /></LinearLayout><Buttonandroid:id="@+id/btn_list"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="列表Dialog" /><Buttonandroid:id="@+id/btn_choose"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="单选Dialog" /><Buttonandroid:id="@+id/btn_multi_choose"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="多选Dialog" /><Buttonandroid:id="@+id/btn_wait"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="等待Dialog" /><Buttonandroid:id="@+id/btn_progress"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="进度条Dialog" /><Buttonandroid:id="@+id/btn_editor"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="编辑Dialog" /><Buttonandroid:id="@+id/btn_custom"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="自定义Dialog" /><Buttonandroid:id="@+id/btn_pop"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="PopUpWindowDialog" /><EditTextandroid:id="@+id/et_main"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>总结:对话框样式多,这只是简单的,要好好的弄,就要更多时间和精力。
相关文章推荐
- Android应用开发学习之AlertDialog对话框
- dwz问题(本文主要是供个人学习成长之用,陈述的是本人在开发过程中遇到的几个小问题的总结,可能兼或插入一些网络资料)
- android dialog对话框的位置问题
- Android应用开发学习笔记之AlertDialog对话框
- AlertDialog对话框按钮位置问题
- Android开发之AlertDialog 关于重写onCreatDialog自定义对话框的问题 问题出自于《疯狂Android讲义》这本书
- android 开发零起步学习笔记(二十三): Android 对话框AlertDialog和AlertDialog.Builder两者的区别
- android开发学习笔记——自定义布局的dialog宽度的问题
- Oracle Database 11g SQL 开发指南学习笔记:运行store_schema.sql时报错的问题
- 【学习路线】最新Java开发资料汇总(持续更新ing)
- 学习笔记之Arcgis server开发中identify查询结果显示问题
- Android开发总结笔记 Dialog(对话框) 1-1-19
- Android学习——Dialog对话框
- Android应用开发学习—Toast的使用(位置变化及重新自定义)
- Android开发之四(十五):常用控件之对话框(Dialog)
- Android对话框Dialog 的一点小问题
- 开发日志:struts标签[<s:selec>/<s:submit>/<s:form>......] 在table的时候位置错误 [会自动换行/自动生成tr、td的问题]
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
- 面向对象的Javascript开发的一些学习资料
- U3D开发学习之路--问题