要产生对话框,特别是产生提醒对话框.网上例子全是.都是抄来抄去的.用了AlertDialog.builder类,这里就不说了.
我要说的是如何定制一个对话框.就是按自己的想要的模样产生这个对话框.如何实现透明? 如何改变对话框的显示位置? 这需要深入研究.
要定制对话框.一般需要定义一个继承自Dialog的类.例子
public class MousePanel extends Dialog implements View.OnClickListener
{
ImageButton btn1=null;
ImageButton btn2=null;
ImageButton btn3=null;
Window window=null;
public MousePanel(Context context){
super(context);
}
public void setDisplay(){
setContentView(R.layout.mouse);
setProperty();
setTitle("mouse panel");
show();
getInstance();
setListener();
}
要显示这个对话框,只要创建该类对象.然后调用该函数即可.
public void setProperty(){
window=getWindow(); 得到对话框的窗口.
WindowManager.LayoutParams wl = window.getAttributes();
// wl.x =0; 这两句设置了对话框的位置.
// wl.y =180;
wl.alpha=0.3f; 这句设置了对话框的透明度
wl.gravity=Gravity.BOTTOM;
window.setAttributes(wl);
}
public void getInstance(){
btn1=(ImageButton)findViewById(R.id.mouse_button1);
btn2=(ImageButton)findViewById(R.id.mouse_button2);
btn3=(ImageButton)findViewById(R.id.mouse_button3);
}
void setListener(){
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
}
public void onClick(View view){
switch(view.getId()){
case R.id.mouse_button1:
dismiss();
break;
case R.id.mouse_button2:
case R.id.mouse_button3:
dismiss();
new MyDialog(getContext()).setDisplay();
break;
default:
}
}
}
主要显示也是用了setContentView()来加载xml来显示你的对话框.看来每一屏幕显示也都是在窗口中显示的.
一定得搞清楚类对象和窗口的关系. 其实两着有很大区别. 一个类对象通过调用系统函数来驱动显卡来创建窗口.这两者是完全不同的东西.
在定制窗口是比较有用的接口还有 dismiss用来销毁窗口.销毁窗口不代表销毁类对象是吧,只是把让屏幕刷新.那显卡里那块数据清零了.