自定义的dialog ,直接上代码了

移动开发 waitig 390℃ 百度已收录 0评论
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.support.annotation.NonNull;
import android.support.annotation.StyleRes;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2017-11-10.
 */

public class CustomDialog extends Dialog {

    private List<Map> vlist;


    public CustomDialog(@NonNull Context context) {
        super(context);
    }

    public CustomDialog(@NonNull Context context, @StyleRes int themeResId) {
        super(context, themeResId);
        setCanceledOnTouchOutside(false);
    }


    public View getViewById(int id) {
        View view=null;
        for (Map map:vlist){
            if (id==(int)(map.get(Constant.ID))){
                switch ((int)map.get(Constant.TYPE)){
                    case Constant.TYPE_BUTTON:
                        view=(Button)map.get(Constant.VIEW);
                        break;
                    case Constant.TYPE_TEXT:
                        view=(TextView)map.get(Constant.VIEW);
                        break;
                    case Constant.TYPE_IMAGE:
                        view=(ImageView)map.get(Constant.VIEW);
                        break;
                    case Constant.TYPE_EDIT:

                        break;
                }
            }
        }
        return view;
    }

    public void setVlist(List<Map> vlist) {
        this.vlist = vlist;
    }



    public static class Buider {

        private Context context;
        private static List<Map> list;

        public Buider(Context context) {
            this.context=context;
            list =new ArrayList<>();
        }

        /**
         * Dialog普通添加组件
         * @param type 组件类型
         * @param id 组件id
         * @param resource 组件内容
         * @param listener 组件监听
         * @param isString true是动态加入 false 为在资源文件中加载
         * @return
         */
        public Buider addView(int type,int id, int resource,  View.OnClickListener listener,boolean isString){
            Map map=new HashMap();
            map.put(Constant.TYPE,type);
            map.put(Constant.ID,id);
            map.put(Constant.RESOURCE,resource);
            map.put(Constant.LISTENER,listener);
            map.put(Constant.ISSTRING,isString);
            list.add(map);
            return this;
        }

        /**
         * Dialog 设置动态text
         * @param id
         * @param resource
         * @param listener
         * @param isString
         * @return
         */
        public Buider addText(int id, String resource,  View.OnClickListener listener,boolean isString){
            Map map=new HashMap();
            map.put(Constant.TYPE, Constant.TYPE_TEXT);
            map.put(Constant.ID,id);
            map.put(Constant.RESOURCE,resource);
            map.put(Constant.LISTENER,listener);
            map.put(Constant.ISSTRING,isString);
            list.add(map);
            return this;
        }

        /**
         * Dialog 设置确认键和取消键
         * @param id
         * @param resource
         * @param listener Dialog onclick positive negative
         * @param type  P N P 是确认键 N 是取消键
         * @param isString
         * @return
         */
        public Buider addButton(int id, String resource,  OnClickListener listener,String type,boolean isString){
            Map map=new HashMap();
            map.put(Constant.TYPE, Constant.TYPE_BUTTON);
            map.put(Constant.ID,id);
            map.put(Constant.RESOURCE,resource);
            map.put(Constant.LISTENER,listener);
            map.put(Constant.PN,type);
            map.put(Constant.ISSTRING,isString);
            list.add(map);
            return this;
        }


        public Buider addEdit(){

            return this;
        }


        /**
         * 创建dialog
         * @param layoutId 传入自定义布局 R.layout.id
         * @return
         */
        public CustomDialog create(int layoutId){
            List<Map> vlist=new ArrayList<>();
            LayoutInflater inflater=(LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final CustomDialog dialog=new CustomDialog(context, R.style.Theme_AppCompat_Dialog);
            View layout=inflater.inflate(layoutId,null);
            Map map1=null;
            LogUtil.i(getClass(),list.toString());
            for (final Map map:list){
                map1=new HashMap();
                LogUtil.i(getClass(),map.toString());
                map1.put(Constant.ID,map.get(Constant.ID));
                switch ((int)map.get(Constant.TYPE)){
                    case Constant.TYPE_BUTTON:
                        Button btn= (Button) layout.findViewById((int)map.get(Constant.ID));
                        if ((boolean)map.get(Constant.ISSTRING)){
                            btn.setText((map.get(Constant.RESOURCE)).toString());
                        }else{
                            btn.setText((int)map.get(Constant.RESOURCE));
                        }
                        if (map.get(Constant.PN)==null||"".equals((String) map.get(Constant.PN))){
                            btn.setOnClickListener((View.OnClickListener)map.get(Constant.LISTENER));
                        }else{
                            if ("P".equals((String) map.get(Constant.PN))){
                                btn.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        ((OnClickListener)map.get(Constant.LISTENER)).onClick(dialog, DialogInterface.BUTTON_POSITIVE);
                                    }
                                });
                            }else{
                                btn.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        ((OnClickListener)map.get(Constant.LISTENER)).onClick(dialog, DialogInterface.BUTTON_NEGATIVE);
                                    }
                                });
                            }
                        }
                        map1.put(Constant.VIEW,btn);
                        map1.put(Constant.TYPE, Constant.TYPE_BUTTON);
                        break;
                    case Constant.TYPE_TEXT:
                        TextView text=(TextView)layout.findViewById((int)map.get(Constant.ID));
                        if ((boolean)map.get(Constant.ISSTRING)){
                            text.setText((map.get(Constant.RESOURCE)).toString());
                        }else{
                            text.setText((int)map.get(Constant.RESOURCE));
                        }
                        if (map.get(Constant.LISTENER)!=null){
                            text.setOnClickListener((View.OnClickListener) map.get(Constant.LISTENER));
                        }
                        map1.put(Constant.VIEW,text);
                        map1.put(Constant.TYPE, Constant.TYPE_TEXT);
                        break;
                    case Constant.TYPE_IMAGE:
                        ImageView image=(ImageView)layout.findViewById((int)map.get(Constant.ID));
                        if (map.get(Constant.RESOURCE)!=null||(int)map.get(Constant.RESOURCE)!=0){
                            image.setImageResource((int)map.get(Constant.RESOURCE));
                        }
                        if (map.get(Constant.LISTENER)!=null){
                            image.setOnClickListener((View.OnClickListener)map.get(Constant.LISTENER));
                        }
                        map1.put(Constant.VIEW,image);
                        map1.put(Constant.TYPE, Constant.TYPE_IMAGE);
                        break;
                    case Constant.TYPE_EDIT:

                        break;
                }
                vlist.add(map1);
            }
            dialog.setContentView(layout);
            dialog.setVlist(vlist);
            return dialog;
        }


    }



}

本文由【waitig】发表在等英博客
本文固定链接:自定义的dialog ,直接上代码了
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)