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用来销毁窗口.销毁窗口不代表销毁类对象是吧,只是把让屏幕刷新.那显卡里那块数据清零了.

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值