很多时候写Android界面时要弹出对话框,Android自带的对话框有AlertDialog,ProgressDialog,DatePickerDialog,TimePickerDialog等等,都可以用于简单的对话框显示,但很多时候这些简单功能并不能满足项目所需,下面以自定义AlertDialog对话框为例:
首先单独建立一个类CustomerDialog继承自AlertDialog
private Context context = null;
public CustomerDialog(Context context) {
super(context);
this.context = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(context);
View customerLayout =
inflater.inflate(R.layout.customer_dialog, null);
setView(customerLayout);
super.onCreate(savedInstanceState);
}
}
再创建一个Activity
private final int CUSTOMER_DIALOG = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.button);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
showDialog(CUSTOMER_DIALOG);
}
};
button.setOnClickListener(listener);
}
@Override
protected Dialog onCreateDialog(int id) {
CustomerDialog dialog = null;
switch (id) {
case CUSTOMER_DIALOG:
dialog = new CustomerDialog(DIY_DialogActivity.this);
dialog.setTitle("自定义对话框");
dialog.setIcon(R.drawable.icon);
break;
}
return dialog;
}
}
运行程序,效果如下:
还可以对自定义对话框位置
WindowManager.LayoutParams lp =w.getAttributes();
lp.x=20;
lp.y=100;
对话框的样式可在customer_dialog.xml中自己自定义,上面步骤便实现了AlertDialog对话框的自定义。
当还是有这些对话框不能满足应用需要的时候,这时候可以用第二种方法,就是使用Activity作为Dialog,这个功能肯定够强大了,可以通过设置Activity显示Dialog风格,使得该Activity在外观上和Dialog一致:显示在其它Activity前面且半透明。
只需在AndroidManifest.xml中如下定义Activity的Theme即可:
android:theme="@android:style/Theme.Dialog">
</activity>