共同点:,都会在各自的onCreate方法中使用getMenuInflater().inflate(resourceId,?)把,布局文件转换成一个view对像(resourceId是menu文件夹下的布局文件的名称,?是各自本身的一个属性);
不同点:不同点在于 ? OptionsMenu与ContextMenu保持默认就可以,但是PopupMenu需要利用PopupMenu的句柄来获取getMenu()方法;
OptionsMenu在重写的OnCreateOptionsMenu方法中,通过getMenuInflater().inflate(R.menu.main,menu);创建
ContextMenu在重写的onCreateContextMenu方法中,通过getMenuInflater().inflater(R.menu.main,menu);创建一个上下文菜单;
需要这自己在layout中创建一个布局文件,然后通过View v = View.inflate(this,R.layout.布局文件,null);转换成一个View对象。然后通过.setView( v )去加到对话框中
public class MainActivity extends Activity {
EditText etname;
EditText etpwd ;
AlertDialog createDialog; // 自定义对话框
AlertDialog singleDialog; // 单选对话框
AlertDialog mutilDialog; // 单选对话框
AlertDialog listDialog; // 列表对话框
String[] fontSizeDesc = { "小号", "中号", "大号", "特大号" };
float[] fontSize = { 10f, 20f, 30f, 40f };
TextView tv;
String[] hibs = { "吃", "喝", "玩", "乐" };
boolean[] checked = { false, false, false, false };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
tv.setTextSize(fontSize[1]);
initSingleDialog(); // 初始化单选对话框
initMutilDialog(); // 初始化多选对话框
initListDialog(); // 初始化列表对话框
initCreateDialogBySelf(); //初始化自定义对话框
}
//初始化自定义对话框
private void initCreateDialogBySelf() {
// 1.把一个指定的布局转成一个VIEW对象
View view = View.inflate(this, R.layout.item_dialog_layout, null);
etname = (EditText) view.findViewById(R.id.etname);
etpwd = (EditText) view.findViewById(R.id.etpwd);
createDialog = new AlertDialog.Builder(this).setTitle("请输入您的信息")
.setView(view).setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(
MainActivity.this,
etname.getText().toString() + ":"
+ etpwd.getText().toString(), 1).show();
}
})
.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
})
.create();
}
// 初始化列表对话框
private void initListDialog() {
ArrayAdapter<String> ad = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1);
// 可以使用适配器里自带的数据源容器
ad.add("红色");
ad.add("绿色");
ad.add("灰色");
ad.add("黄色");
listDialog = new AlertDialog.Builder(this).setTitle("请选择字体的颜色")
// 通过适配器来设置数据源,设置一个可选列表
.setAdapter(ad, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
// 表示红色
tv.setTextColor(Color.RED);
break;
case 1:
tv.setTextColor(Color.GREEN);
break;
case 2:
tv.setTextColor(Color.GRAY);
break;
case 3:
tv.setTextColor(Color.YELLOW);
break;
}
}
}).create();
}
// 多选对话框初始化
private void initMutilDialog() {
mutilDialog = new AlertDialog.Builder(this)
.setTitle("请选择您的爱好")
.setMultiChoiceItems(hibs, checked,
new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which, boolean isChecked) {
checked[which] = isChecked;
}
}).setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < checked.length; i++) {
if (checked[i]) {
sb.append("\n" + hibs[i] + "\t");
}
}
tv.setText(sb.toString());
}
}).setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).setCancelable(false).create();
}
// 单选对话框
public void singleCheck(View view) {
singleDialog.show();
}
// 多选对话框
public void mutilCheck(View view) {
mutilDialog.show();
}
// 列表对话框
public void listCheck(View view) {
listDialog.show();
}
// 自定义对话框
public void createCheck(View view) {
etname.setText("");
etpwd.setText("");
createDialog.show();
}
// 单选对话框的初始化操作
private void initSingleDialog() {
singleDialog = new AlertDialog.Builder(this).setTitle("请选择字体的大小")
.setSingleChoiceItems(fontSizeDesc, 1, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tv.setTextSize(fontSize[which]);
// Toast.makeText(MainActivity.this,
// fontSizeDesc[which], 1).show();
singleDialog.dismiss();
}
}).setIcon(R.drawable.ic_launcher).create();
}
}