自定义dialog,链式调用

自定义普通diaolog,链式调用,适用于没有交互(用户输入),支持自定义布局,给控件设置监听事件,给TextView设置文本内容,获取控件等

public class CommonDialog {

    private Builder builder;

    public CommonDialog(Builder builder) {
        this.builder = builder;
    }

    public void show(){
        builder.show();
    }

    public static class Builder extends Dialog implements View.OnClickListener {

        private List<Integer> viewIds;//需要设置内容的TextView
        private List<CharSequence> viewValues;//设置的内容
        private Integer gravity;
        private OnAllItemClickListener listener;
        private int[] listenItem;//点击事件监听的控件集合

        private void showDialog(){
            show();
        }

        public Builder(Context context,@LayoutRes int resId) {
            super(context);
            setContentView(resId);
            initData();

        }

        private void initData() {
            viewIds = new ArrayList<>();
            viewValues = new ArrayList<>();
        }

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Window window = getWindow();
            if (window != null) {
                window.setBackgroundDrawableResource(android.R.color.transparent);
                gravity = gravity == null ? Gravity.CENTER : gravity;
                WindowManager.LayoutParams params = window.getAttributes();
                params.gravity = gravity;
                window.setAttributes(params);
            }

            for (int i = 0; i < listenItem.length; i++) {
                //控件设置监听事件
                findViewById(listenItem[i]).setOnClickListener(this);
            }

            //循环设TextView置文本
            for (int i = 0; i < viewIds.size(); i++) {
                TextView view = findViewById(viewIds.get(i));
                view.setText(viewValues.get(i));
            }
        }

        public Builder setGravity(Integer gravity){
            this.gravity = gravity;
            return this;
        }

        public Builder setListenItem(int[] listenItem){
            this.listenItem = listenItem;
            return this;
        }

        public Builder setListener(OnAllItemClickListener listener){
            this.listener = listener;
            return this;
        }

        /**
         * 给TextView设置文本内容
         * @param viewId TextView的ID
         * @param value 需要设置的值
         */
        public Builder setText(@IdRes int viewId, CharSequence value){
            viewIds.add(viewId);
            viewValues.add(value);
            return this;
        }

        @Override
        public void onClick(View v) {
            if (listener != null){
                listener.handleClick(this,v);
            }
        }

        public interface OnAllItemClickListener{
            void handleClick(Builder builder,View view);
        }

        public CommonDialog build(){
            return new CommonDialog(this);
        }
    }
}
发布了62 篇原创文章 · 获赞 45 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/parade0393/article/details/103899104