Android开发:自定义界面的Dialog,并且实现按钮的监听回调

来源:互联网 发布:苏州市网络安全教育 编辑:程序博客网 时间:2024/05/17 20:26

该项目适合想实现自定义dialog,有懒得折腾的人。

在安卓开发的时候,往往会碰到一些特别漂亮的dialog,比如这个图片的:



很多这种类型的dialog,界面千变万化,于是我建立了一个通用自定义dialog,可以实现以下功能:

1、界面的自定义,全部自己用xml定义界面;

2、不管是在Fragment,还是Activity都可以实例化该dialog,并且实现dialog按钮的监听回调;

3、在dialog按钮点击后,自动消失。


当然,先看下效果图:



界面很丑,因为不同的项目,对于界面的需求会不同,完全可以通过xml自定义,所以界面就没有做优化了,但是功能杠杆的,适合想实现自定义dialog,有懒得折腾的人;


好,首先附上自定义dialog的代码,由于代码比较简单,我就全部附上来了


public class MyDialogFragment extends DialogFragment{private int mNum;private OnDialogButtonClickListener buttonClickListner;static MyDialogFragment newInstance(int num) {        MyDialogFragment f = new MyDialogFragment();        Bundle args = new Bundle();        args.putInt("num", num);        f.setArguments(args);        return f;    }//实现回调功能public interface OnDialogButtonClickListener {public void okButtonClick();public void cancelButtonClick();}@Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);//        mNum = getArguments().getInt("num");        int style = DialogFragment.STYLE_NORMAL, theme = 0;        switch (2) {            case 1: style = DialogFragment.STYLE_NO_TITLE; break;            case 2: style = DialogFragment.STYLE_NO_FRAME; break;            case 3: style = DialogFragment.STYLE_NO_INPUT; break;            case 4: style = DialogFragment.STYLE_NORMAL; break;            case 5: style = DialogFragment.STYLE_NORMAL; break;            case 6: style = DialogFragment.STYLE_NO_TITLE; break;            case 7: style = DialogFragment.STYLE_NO_FRAME; break;            case 8: style = DialogFragment.STYLE_NORMAL; break;        }        switch (5) {            case 4: theme = android.R.style.Theme_Holo; break;            case 5: theme = android.R.style.Theme_Holo_Light_Dialog; break;            case 6: theme = android.R.style.Theme_Holo_Light; break;            case 7: theme = android.R.style.Theme_Holo_Light_Panel; break;            case 8: theme = android.R.style.Theme_Holo_Light; break;        }        setStyle(style, theme);    }@Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.fragment_dialog, container, false);        Button button = (Button)v.findViewById(R.id.btn_ok);        button.setOnClickListener(new OnClickListener() {            public void onClick(View v) {            buttonClickListner.okButtonClick();            getDialog().dismiss();            }        });                v.findViewById(R.id.btn_cancel).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {buttonClickListner.cancelButtonClick();getDialog().dismiss();}});        return v;    }public void setOnButtonClickListener(OnDialogButtonClickListener listener) {this.buttonClickListner = listener;}}

里面有一些多余的代码,比如newInstance先留着,难免以后用得到,代码中是继承了dialogfragment,然后自定义layout,用interface实现按钮的点击监听,获取点击事件的代码如下:

MyDialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);    newFragment.show(ft, "dialog");        newFragment.setOnButtonClickListener(new OnDialogButtonClickListener() {@Overridepublic void okButtonClick() {Log.i("debug", "ok button click");}@Overridepublic void cancelButtonClick() {Log.i("debug", "cancel button click");}});


这样的话,既可以自定义dialog,有可以获取dialog的点击事件,以后再碰到特殊界面的dialog,就再也不用担心了


源代码

0 0
原创粉丝点击