自定义Dialog

在Android开发中经常需要弹出Dialog显示信息,如果选取系统自带的Dialog,风格的确多样,但是感觉效果总会不尽如人意,那么现在可以尝试按照所想的风格样式来自定义Dialog。

1.先准备布局文件。

2.写一个ViewHolder,构造函数带两个参数:Context和View,这个ViewHolder与Activity的ViewHolder是不一样,这个View可以看作是一个布局,所有的控件都以它为载体。

public TimeViewHolder(Dialog activity, View view) {
     this.activity = activity;        
     this.root = view;
}

3.设计风格样式:这个风格文件定义在res/values/styles.xml中,当然可以写到其他风格文件中。

     < style name= "picture_mode" parent ="@android:Theme.Dialog" >
         < item name ="android:windowFrame" >@null </ item>
         < item name ="android:windowIsFloating" >true </ item>
         < item name ="android:windowIsTranslucent" >false </ item>
         < item name ="android:windowNoTitle" >true </ item> <!--除去title-->
         < item name ="android:windowContentOverlay" >@null </ item>
         < item name ="android:backgroundDimEnabled" >false </ item> <!--如果为true,Activity会变黑-->
         <!--  < item name ="android:windowBackground" >@null </ item> 除去背景色-->
         < item name ="android:windowBackground">@android:color/transparent</item> <!--除去背景色-->
     </style >

4.在Activity中创建Dialog:

Dialog timeDialog = new Dialog( mActivity,
    R.style. picture_mode) {//创建Dialog时,带一个Content参数:mActivity
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout. time);
        View mView=getWindow().getDecorView();//关键在这里,这个View,是你根据xml中的id来找对应控件的。
        if (timeViewHolder == null) {
            timeViewHolder = new TimeViewHolder(mActivity ,mView);
        }
    }
    @Override
    protected void onStart() {//在这个方法中,你可以实现一些交互动作
        // TODO Auto-generated method stub
        super.onStart();
        Log. i("Dialog", "timeDialog onStart");
        timeViewHolder.findViews();
    }
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {//按键动作,
        // TODO Auto-generated method stub
        return super.dispatchKeyEvent(event);
    }
};
timeDialog.setOnDismissListener( new OnDismissListener() {//当Dialog消失时,做一些处理
    //因为这个Dialog出现时,我把Activity隐藏了,
    //所以在Dialog消失时,我要把Activity显示出来
    @Override
    public void onDismiss(DialogInterface dialog) {
        // TODO Auto-generated method stub
        linearlayout_tvset_menu.setVisibility(View.VISIBLE);//Activity显示出来
        linearlayout_set_time.requestFocus();
        timeViewHolder = null ;
    }
});
timeDialog.show();

5.在ViewHolder中使用Dialog的布局中的控件:

private Dialog mDialg ;
private TextView tv_time_date;
public TimeViewHolder(Dialog dialog) {
     tvTimerManager = TvTimerManager.getInstance();
}
public void findViews() {
     tv_time_date = (TextView) mDialg.findViewById(R.id.tv_time_date);
    loadDataToUI();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值