Android 对话框进阶(自定义)--转载

要产生对话框,特别是产生提醒对话框.网上例子全是.都是抄来抄去的.用了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用来销毁窗口.销毁窗口不代表销毁类对象是吧,只是把让屏幕刷新.那显卡里那块数据清零了.

 

转自:http://www.wscxy.com/nuaa/article.asp?id=41

posted @ 2010-12-30 17:51  郑涛  阅读(1089)  评论(0编辑  收藏  举报