alertdialog可以在当前界面中弹出一个对话框,这个对话框在界面所有元素之上,可以屏蔽掉其他控件的交互能力,因此alertdialog常用于一些重要的内容警告。
使用AlertDialog.Builder创建对话框需要了解以下几个方法:
setTitle :为对话框设置标题
setIcon :为对话框设置图标
setMessage:为对话框设置内容
setView : 给对话框设置自定义样式
setItems :设置对话框要显示的一个list,一般用于显示几个命令时
setMultiChoiceItems :用来设置对话框显示一系列的复选框
setNeutralButton :普通按钮
setPositiveButton :给对话框添加"Yes"按钮
setNegativeButton :对话框添加"No"按钮
setCancelable:点击其他部位是否可以取消alertdialog,默认为true
setSingleChoiceItems:设置类似于单选框一样的list
create : 创建对话框
show :显示对话框
普通的AlertDialog:
package com.example.alertdialogdemo; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private Button bt; private TextView tv; private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = MainActivity.this; bt = (Button) findViewById(R.id.bt); tv = (TextView) findViewById(R.id.tv); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setCancelable(false); dialog.setIcon(R.drawable.remind); dialog.setTitle("This is title!"); dialog.setMessage("This is Message!"); dialog.setPositiveButton("YES", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(mContext, "YES→" + which, Toast.LENGTH_SHORT).show(); changeText(which); } }); dialog.setNegativeButton("NO", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(mContext, "NO→" + which, Toast.LENGTH_SHORT).show(); changeText(which); } }); dialog.show(); } }); } public void changeText(int which) { if (which == -1) { tv.setText("您选择的是YES!"); } else if (which == -2) { tv.setText("您选择的是NO!"); } } }
运行结果:
类似ListView的AlertDialog
package com.example.alertdialogdemo; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private Button bt; private TextView tv; private Context mContext; private String[] phones = { "三星", "苹果", "小米", "魅族", "锤子", "华为", "中兴" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = MainActivity.this; bt = (Button) findViewById(R.id.bt); tv = (TextView) findViewById(R.id.tv); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setCancelable(true); dialog.setIcon(R.drawable.phone); dialog.setTitle("选择你喜欢的手机"); dialog.setItems(phones, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { changeText(which); } }); dialog.show(); } }); } public void changeText(int which) { tv.setText("您选择的手机是: " + phones[which]); } }
运行结果:
单选AlertDialog
package com.example.alertdialogdemo; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private Button bt; private TextView tv; private Context mContext; private String[] sex = { "男生", "女生", "雌雄同体" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = MainActivity.this; bt = (Button) findViewById(R.id.bt); tv = (TextView) findViewById(R.id.tv); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setCancelable(true); dialog.setIcon(R.drawable.phone); dialog.setTitle("你的性别:"); // 第二个参数是默认选择位置 dialog.setSingleChoiceItems(sex, 0, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { changeText(which); } }); dialog.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); dialog.show(); } }); } public void changeText(int which) { tv.setText("您的性别是: " + sex[which]); } }
运行结果:
多选AlertDialog
package com.example.alertdialogdemo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnMultiChoiceClickListener; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private Button bt; private TextView tv; private Context mContext; private String[] hobby = { "看电影", "看书", "上网", "篮球", "足球", "游泳", "逛街", "羽毛球" }; private List<String> hobbyList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = MainActivity.this; hobbyList = new ArrayList<String>(); bt = (Button) findViewById(R.id.bt); tv = (TextView) findViewById(R.id.tv); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setCancelable(true); dialog.setIcon(R.drawable.heart); dialog.setTitle("你的性别:"); dialog.setMultiChoiceItems(hobby, null, new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { hobbyList.add(hobby[which]); } }); dialog.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { changeText(); } }); dialog.show(); } }); } public void changeText(int which) { } public void changeText() { String str = ""; for (int i = 0; i < hobbyList.size(); i++) { str = hobbyList.get(i) + " " + str; } tv.setText("您的爱好有: " + str); } }
运行结果:
自定义AlertDialog
MainActivity.java
package com.example.alertdialogdemo; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; @SuppressLint("NewApi") public class MainActivity extends Activity { private Button bt; private TextView tv; private Context mContext; private View view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = MainActivity.this; bt = (Button) findViewById(R.id.bt); tv = (TextView) findViewById(R.id.tv); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); view = LayoutInflater.from(mContext).inflate(R.layout.custom_view_dialog, null); dialog.setCancelable(true); dialog.setTitle("你的身高:"); dialog.setView(view); dialog.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { changeText(); } }); dialog.show(); } }); } public void changeText() { EditText et = (EditText) view.findViewById(R.id.height); String height = et.getText().toString().trim(); tv.setText("身高:" + height + " cm"); } }
custom_view_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ruler" /> <EditText android:id="@+id/height" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="cm" /> </LinearLayout>
运行效果: