自定义弹出框

自定义弹出框

第一步

在res的values中创建styles_dialog.xml文件





第二步

创建自定义xml布局文件






    

    

    
        
        

            

            
            
        
        





第三步

创建MyDialogUtil文件

package com.daodian.mydialogtestavtivity;

import android.app.AlertDialog;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.TextView;

import androidx.databinding.DataBindingUtil;

import com.daodian.mydialogtestavtivity.databinding.LayoutMyDialogBinding;


public class MyDialogUtil {

    private AlertDialog dialog;
    private static MyDialogUtil myDialogUtil;
    private MyDialogUtil(){
    }

    public static MyDialogUtil getDialogUtils(){
        if(myDialogUtil == null){
            myDialogUtil = new MyDialogUtil();
        }

        return myDialogUtil;
    }


    /**
     * @param context
     * @param title         标题
     * @param content       内容
     * @param hint          编辑框提示信息
     * @param leftBtn       左边的文本按钮
     * @param rightBtn      右边的文本按钮
     */
    public void showDialog(final Context context, String title, String content, String hint, String leftBtn, String rightBtn){


        View view = LayoutInflater.from(context).inflate(R.layout.layout_my_dialog, null);



        TextView dialog_title = view.findViewById(R.id.dialog_title);
        TextView dialog_content = view.findViewById(R.id.dialog_content);
        final EditText dialog_edit = view.findViewById(R.id.dialog_edit);
        TextView cancel = view.findViewById(R.id.cancel);
        TextView confirm = view.findViewById(R.id.confirm);

        if (TextUtils.isEmpty(title)){
            dialog_title.setVisibility(View.GONE);
        }else{
            dialog_title.setText(title);
        }

        if (TextUtils.isEmpty(content)){
            dialog_content.setVisibility(View.GONE);
        }else{
            dialog_content.setText(content);
        }

        if (TextUtils.isEmpty(hint)){
            dialog_edit.setVisibility(View.GONE);
        }else{
            dialog_edit.setHint(hint);
        }


        cancel.setText(leftBtn);
        confirm.setText(rightBtn);

        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cancel();
            }
        });

        confirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String data = dialog_edit.getText().toString();

                if (TextUtils.isEmpty(data)){
                    ToastUtil.getToast().showToast(context, "输入框不能为空");
                }else{
                    ToastUtil.getToast().showToast(context, data);
                    cancel();
                }

            }
        });

        initView(context, view, false, false);

    }


    /**
     * @param context
     * @param title         标题
     * @param content       内容
     * @param hint          编辑框提示信息
     * @param leftBtn       左边的文本按钮
     * @param rightBtn      右边的文本按钮
     */
    public void showDialog2(final Context context, String title, String content, String hint, String leftBtn, String rightBtn){

        LayoutMyDialogBinding binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.layout_my_dialog,null, false);



        if (TextUtils.isEmpty(title)){
            binding.dialogTitle.setVisibility(View.GONE);
        }else{
            binding.dialogTitle.setText(title);
        }

        if (TextUtils.isEmpty(content)){
            binding.dialogContent.setVisibility(View.GONE);
        }else{
            binding.dialogContent.setText(content);
        }

        if (TextUtils.isEmpty(hint)){
            binding.dialogEdit.setVisibility(View.GONE);
        }else{
            binding.dialogEdit.setHint(hint);
        }


        binding.cancel.setText(leftBtn);
        binding.confirm.setText(rightBtn);

        binding.cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cancel();
            }
        });

        binding.confirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String data = binding.dialogEdit.getText().toString();

                if (TextUtils.isEmpty(data)){
                    ToastUtil.getToast().showToast(context, "输入框不能为空");
                }else{
                    ToastUtil.getToast().showToast(context, data);
                    cancel();
                }

            }
        });

        initView(context, binding.getRoot(), false, false);

    }



    /**
     *
     * @param context
     * @param view
     * @param canceledOnTouchOutside  点击外面是否消失 true点击外面可以消失
     * @param cancelable              false的话 点击屏幕和返回按键都不会消失 默认是true
     * @return
     */
    private AlertDialog initView(Context context, View view, boolean canceledOnTouchOutside, boolean cancelable){
        dialog = new AlertDialog.Builder(context, R.style.myDialog).create();
        dialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
        dialog.setCancelable(cancelable);
        view.setLayoutParams(new WindowManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        dialog.setView(view, 0, 0, 0, 0);

        dialog.show();
        return dialog;

    }




    public void cancel(){
        if (dialog != null && dialog.isShowing()){
            dialog.cancel();
        }
        if (myDialogUtil != null){
            myDialogUtil = null;
        }
    }


}

showDialog2和showDialog的运行结果是一样的,showDialog2是使用DataBinding绑定id,代码更简洁

第四步

调用显示弹出框

package com.daodian.mydialogtestavtivity;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Dialog;
import android.os.Bundle;

import android.view.View;

import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);


    }

    @OnClick(R.id.btn1)
    public void btn1(){
        MyDialogUtil.getDialogUtils().showDialog2(this, "", "内容", "", "确定", "");
    }

    @OnClick(R.id.btn2)
    public void btn2(){
        MyDialogUtil.getDialogUtils().showDialog2(this, "", "", "提示信息", "", "确定");
    }

    @OnClick(R.id.btn3)
    public void btn3(){
        MyDialogUtil.getDialogUtils().showDialog2(this, "标题", "内容", "提示信息", "取消", "确定");
    }
}

有关 ButterKnife的资料请参考之前的文章
自定义弹出框_第1张图片 自定义弹出框_第2张图片

自定义弹出框_第3张图片

源码

自定义弹出框

你可能感兴趣的:(Android,学习)