您的位置:首页 > 其它

开发对话框Dialog的学习资料和dialog选中位置的问题

2017-05-10 15:49 483 查看
Android提供了丰富的
Dialog
函数,本文介绍最常用的8种对话框的使用方法,包括普通(包含提示消息和按钮)、列表、单选、多选、等待、进度条、编辑、自定义等多种形式。
1:普通
Dialog
AlertDialog.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:列表
Dialog
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() {@Overridepublic void onClick(DialogInterface dialog, int which) {showToast(mList[which]);}}).show();3:单选
Dialog
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;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:多选
Dialog
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();5:等待
Dialog
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();6:进度条
Dialog
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();
7:编辑
Dialog
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();8:自定义
Dialog
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();
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
Dialog
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);
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>
总结:对话框样式多,这只是简单的,要好好的弄,就要更多时间和精力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐