Android中自定义对话框
2014-07-01 23:25
204 查看
在安卓基础中,我学习到了定义一个对话框弹窗,用来确定和取消,选择一些内容,进度等等,项目中进一步学会了自己定义对话框,不用系统的。
首先是调用系统的对话框,
代码如上,首先new一个AlertDialog.builder对象,然后setTitle(),setMessage(),setPositionButton就是确定按钮啦,在4.X版本是右面的按钮,2.X是左面的按钮,这里传两个值,第一个是按钮显示的名字,第二个是一个监听器;同样的,还有setPositiveButton(),同样传入两个参数。
但这个的对话框一看就是系统的,我们上淘宝,点退出的时候,对话框是很漂亮的,这就需要自定义对话框。简单几步:
首先,要自己写对话框的布局文件XML:
然后在对应要调用这个的java文件中写相应的加载方法:
一般来说,取消就是把这个对话框消除掉,builder.dismiss()不能用,但是builder.show()会返回一个AlertDialog对象,在类外生命这个对象,然后在show的时候获得这个对象,这个就在取消按钮监听器中调用这个dialog.dismiss()方法消除掉这个对话框。
首先是调用系统的对话框,
AlertDialog.Builder builder = new Builder(this); builder.setTitle("我是对话框"); builder.setMessage("对话框显示的内容"); builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(getApplicationContext(), "确定被点击了", 0).show(); } }); builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //什么都不写默认实现就是关闭掉对话框 } }); builder.setCancelable(false); builder.create().show(); }
代码如上,首先new一个AlertDialog.builder对象,然后setTitle(),setMessage(),setPositionButton就是确定按钮啦,在4.X版本是右面的按钮,2.X是左面的按钮,这里传两个值,第一个是按钮显示的名字,第二个是一个监听器;同样的,还有setPositiveButton(),同样传入两个参数。
但这个的对话框一看就是系统的,我们上淘宝,点退出的时候,对话框是很漂亮的,这就需要自定义对话框。简单几步:
首先,要自己写对话框的布局文件XML:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="300dip" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="vertical" android:background="#ffffff" > <TextView android:layout_width="300dip" android:layout_height="50dip" android:background="#66ff6600" android:gravity="center" android:text="请输入密码" android:textColor="#000000" android:textSize="22sp" /> <EditText android:id="@+id/et_setup_pwd" android:layout_width="280dip" android:layout_height="wrap_content" android:hint="请输入密码" android:inputType="textPassword" /> <LinearLayout android:layout_width="300dip" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" > <Button android:id="@+id/ok" android:layout_width="140dip" android:layout_height="wrap_content" android:text="确定" /> <Button android:id="@+id/cancel" android:layout_width="140dip" android:layout_height="wrap_content" android:text="取消" /> </LinearLayout> </LinearLayout>显示的事输入两次密码的界面;
然后在对应要调用这个的java文件中写相应的加载方法:
private Button ok; private Button cancle; private EditText et_setup_pw; private EditText et_setup_confirm; private AlertDialog dialog; protected void showLostDialog() { final String passwordFromSp = sp.getString("password", ""); if(TextUtils.isEmpty(passwordFromSp)) { AlertDialog.Builder builder = new Builder(this); View view = View.inflate(this, R.layout.dialog_setup_password, null); ok = (Button) view.findViewById(R.id.ok); cancle = (Button) view.findViewById(R.id.cancel); et_setup_pw = (EditText) view.findViewById(R.id.et_setup_pwd); et_setup_confirm = (EditText) view.findViewById(R.id.et_setup_confirm); builder.setView(view); dialog = builder.show(); ok.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { String password = et_setup_pw.getText().toString(); String repassword = et_setup_confirm.getText().toString(); if(TextUtils.isEmpty(password)||TextUtils.isEmpty(repassword)) { Toast.makeText(HomeActivity.this,"输入的密码不能为空" , 0).show(); return; } else if(!password.equals(repassword)) { Toast.makeText(HomeActivity.this,"密码和确认密码不一致" , 0).show(); return; } Editor editor = sp.edit(); editor.putString("password", MD5Utils.md5Password(password)); editor.commit(); Toast.makeText(HomeActivity.this,"密码保存成功" , 0).show(); dialog.dismiss(); //进入第一个界面 Intent intent = new Intent(getApplicationContext(), LostFindActivity.class); startActivity(intent); } }); cancle.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { dialog.dismiss(); } }); } else { AlertDialog.Builder builder = new Builder(this); View view = View.inflate(this, R.layout.dialog_enter_password, null); builder.setView(view); dialog = builder.show(); ok = (Button) view.findViewById(R.id.ok); cancle = (Button) view.findViewById(R.id.cancel); et_setup_pw = (EditText) view.findViewById(R.id.et_setup_pwd); ok.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { String password = et_setup_pw.getText().toString(); if(!MD5Utils.md5Password(password).equals(passwordFromSp)) { Toast.makeText(HomeActivity.this,"密码不正确" , 0).show(); return; } else { //进入界面 Toast.makeText(HomeActivity.this,"密码正确" , 0).show(); dialog.dismiss(); Intent intent = new Intent(getApplicationContext(), LostFindActivity.class); startActivity(intent); return; } } }); cancle.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { dialog.dismiss(); } }); } }和以前不同的是这次不再setTitle一系列操作了,而是先用inflate()把这个文件变成view,然后builder.setView,加载进这个构造器内,然后show()出来就行,如果要修改组件里面的内容,可以先声明组件,然后初始化,然后对相应的按钮设置相应的点击事件。
一般来说,取消就是把这个对话框消除掉,builder.dismiss()不能用,但是builder.show()会返回一个AlertDialog对象,在类外生命这个对象,然后在show的时候获得这个对象,这个就在取消按钮监听器中调用这个dialog.dismiss()方法消除掉这个对话框。
相关文章推荐
- Android---功能模块一之颜色选择器自定义Preference 对话框
- Android自定义对话框列表
- Android自定义对话框的大小
- Android对话框的自定义及透明效果
- android自定义大小对话框
- android 自定义对话框 背景透明
- Android自定义Dialog对话框
- Android自定义对话框
- android 自定义对话框 背景透明
- android自定义对话框
- 20. android dialog——自定义对话框之一
- Android简明开发教程十八:自定义对话框 Transform
- Android简明开发教程十八:自定义对话框 Transform
- Android 对话框进阶(自定义)
- android自定义对话框
- Android Dialog( 自定义对话框)
- Android简明开发教程十八:自定义对话框 Transform
- android 自定义对话框
- android Dialog 各种Dialog 三个选项的、进度条的、单选的、多选的、自定义的对话框
- android Dialog 各种Dialog 三个选项的、进度条的、单选的、多选的、自定义的对话框