Android-Dialog对话框全解
1.概述
学习 Toast的使用,包括其自定义
2.重点
(1)对话框的实现
(2)普通对话框
(3)单选对话框
(4)多选对话框
(5)列表对话框
(6)自定义布局对话框
(7)Activity实现 对话框
(8)DialogInterface.OnClickListener 处理返回值
3.普通对话框
3.1 效果图
3.2 实现
(1)实现确定按钮监听(DialogInterface.OnClickListener )
- //两个事件 : 确定监听
- class DialogSureClickListener implements DialogInterface.OnClickListener{
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // 判断 点击的是什么按钮
- dialog.dismiss();
- Toast.makeText(MainActivity.this,"点击了确定按钮",Toast.LENGTH_SHORT).show();
- tv_result.setText("点击了确定按钮");
- }
- }
(2)实现取消按钮监听(DialogInterface.OnClickListener )
- //取消监听
- class DialogCanelClickListener implements DialogInterface.OnClickListener{
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // 判断 点击的是什么按钮
- dialog.dismiss();
- Toast.makeText(MainActivity.this,"点击了取消按钮",Toast.LENGTH_SHORT).show();
- tv_result.setText("点击了取消按钮");
- }
- }
(3)dialog 实现
- /**
- * 普通的dialog
- */
- private void ShowPuTongDialog(){
- AlertDialog.Builder builder=new Builder(this);
- builder.setTitle("普通Dialog");
- builder.setIcon(R.drawable.img);
- builder.setMessage("Hi,我是 普通 Dialog");
- builder.setPositiveButton("确定",new DialogSureClickListener());
- builder.setNegativeButton("取消",new DialogCanelClickListener());
- AlertDialog dialog= builder.create();
- dialog.show();
- }
-
4.单选按钮对话框
4.1 效果图
4.2实现
(1)准备数据源
- //准备数据源
- private String[] items={"儿童","少年","青年","成年","大叔","老头"};
(2)实现点击监听(DialogInterface.OnClickListener )
- //监听事件
- class DialogsingleClickListener implements DialogInterface.OnClickListener{
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // 判断 单选按钮
- Toast.makeText(MainActivity.this,items[which],Toast.LENGTH_SHORT).show();
- tv_result.setText(items[which]);
- dialog.dismiss();
- }
- }
-
(3)dialog实现
- /**
- * 单选按钮对话框
- */
- private void ShowSingleDialog(){
- AlertDialog.Builder builder=new Builder(this);
- builder.setTitle("单选按钮对话框");
- builder.setIcon(R.drawable.ic_launcher);
- builder.setSingleChoiceItems(items,0,new DialogsingleClickListener());
- AlertDialog dialog=builder.create();
- dialog.show();
- }
-
5.多选按钮对话框
5.1 效果图
5.2 实现
(1)准备数据源
- //数据源
- private String[] items1={"儿童","少年","青年","成年","大叔","老头"};
(2)多选监听事件(DialogInterface.OnMultiChoiceClickListener)
- //多选监听事件
- class DialogMuitlClickListener implements DialogInterface.OnMultiChoiceClickListener{
- @Override
- public void onClick(DialogInterface dialog, int which, boolean isChecked) {
- // OnMultiChoiceClickListener
- if(isChecked){
- Toast.makeText(MainActivity.this,items1[which],Toast.LENGTH_SHORT).show();
- tv_result.setText(tv_result.getText().toString()+items1[which]);
- }
- }
- }
(3)按钮监听事件(DialogInterface.OnClickListener)
- // 确定 监听事件
- class DialogMuitlSureClickListener implements DialogInterface.OnClickListener{
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // 关闭 Dialog
- dialog.dismiss();
- }
- }
(4)Dialog 实现
- /**
- * 多选按钮 对话框
- */
- private void ShowMuitlDialog(){
- AlertDialog.Builder builder=new Builder(this);
- builder.setTitle("多选按钮对话框");
- builder.setIcon(R.drawable.ic_launcher);
- builder.setMultiChoiceItems(items, null,new DialogMuitlClickListener());
- builder.setPositiveButton("确定",new DialogMuitlSureClickListener());
- AlertDialog dialog=builder.create();
- dialog.show();
- }
6.列表对话框
6.1 效果图
6.2 实现
(1)准备数据源
- //设置数据源
- private String[] items2={"儿童","少年","青年","成年","大叔","老头"};
(2)设置监听事件(DialogInterface.OnClickListener)
- // list 监听事件
- class DialoglistClickListener implements DialogInterface.OnClickListener{
- @Override
- public void onClick(DialogInterface dialog, int which) {
- Toast.makeText(MainActivity.this,items2[which],Toast.LENGTH_SHORT).show();
- tv_result.setText(items2[which]);
- // 关闭 Dialog
- dialog.dismiss();
- }
- }
(3)Dialog实现
- /**
- * list 对话框实现
- */
- private void ShowListDialog(){
- AlertDialog.Builder builder=new Builder(this);
- builder.setTitle("list对话框");
- builder.setIcon(R.drawable.ic_launcher);
- builder.setItems(items2, new DialoglistClickListener());
- AlertDialog dialog=builder.create();
- dialog.show();
- }
-
7.自定义对话框
7.1效果图
7.2 实现
(1)新建Layout布局
实现 一个图片,一个输入框,一个按钮
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center"
- android:orientation="vertical" >
- <ImageView
- android:id="@+id/imageView1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:src="@drawable/img" />
- <EditText
- android:id="@+id/editText1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:ems="10" >
- <requestFocus />
- </EditText>
- <Button
- android:id="@+id/btn_tijiao"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="提交数据" />
- </LinearLayout>
这里也使用到了 将布局 转为 view对象 ,目前 有两种方法 可以将 Layout布局转 View对象;
- private EditText editText1;
- private AlertDialog selfdialog;
- /**
- * 自定义布局 的dialog 包括 取代 dialog中的值
- */
- private void ShowSelfDialog(){
- //将 layout布局 转为 view对象
- LayoutInflater inflater=getLayoutInflater().from(this);
- View view=inflater.inflate(R.layout.dialog_layout,null);
- AlertDialog.Builder builder=new Builder(this);
- builder.setTitle("自定义对话框");
- builder.setIcon(R.drawable.ic_launcher);
- builder.setView(view);
- selfdialog=builder.create();
- selfdialog.show();
- //取得 dialog中的值
- Button btn_tijiao=(Button) view.findViewById(R.id.btn_tijiao);
- editText1=(EditText) view.findViewById(R.id.editText1);
- btn_tijiao.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // 取得 dialog 中的值
- tv_result.setText("自定义 Dialog中取得值:"+editText1.getText().toString());
- selfdialog.dismiss();
- }
- });
- }
8.Activity 对话框
8.1效果图
没有优化,就这样了!
8.2 实现
(1)新建Activity
(2)设置主题
打开 Androidmainfest.xml ,找到刚刚新建的Activity 设置主题 theme
- <activity
- android:name=".DialogActivity"
- android:theme="@android:style/Theme.Dialog"
- android:label="@string/title_activity_dialog" >
- </activity>
(4)初始化控件 实现 按钮点击事件
这里说明一下,因为需要 回调 传值,故使用了 setResult ;
- class btn_tijiaoClickListener implements OnClickListener{
- @Override
- public void onClick(View v) {
- // 按钮点击事件 ,给 mainActivity 回传输入的值
- Intent intent=new Intent();
- intent.putExtra("data",edittext1.getText().toString());
- setResult(1,intent);
- //结束 Activity dialog
- finish();
- }
- }
(5)MainActivity 重写 onActivityResult 回调 拿值
- /**
- * 重写 onActivityResult 方法 拿到 回调的值
- */
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- //回调拿值
- if(resultCode==1&&requestCode==2){
- tv_result.setText(data.getStringExtra("data"));
- }
- }
-
(6)启动使用 startActivityforResult () 方法
- Intent intent=new Intent(MainActivity.this,DialogActivity.class);
- startActivityForResult(intent, 2);