Android 自定义Dialog的简单实现

感觉好像已经很久没更新博客了,前段时间主要是忙于新工作的事情,现在我又可以抽出时间来写写博客了,今天分享一篇自定义Dialog的简单实现

一、前言
现在很多App的提示对话框都非常个性化,我们早已不再满足于使用系统的对话框样式,一般而言,我们会根据自家的App的主题,设计出相对应风格的Dialog,今天我就给大家分享一篇自定义的Dialog,主要的功能有:

  1. 设置标题以及标题字体的颜色
  2. 设置内容以及内容字体的颜色
  3. 设置确认按钮的文字以及字体颜色
  4. 设置取消按钮的文字以及字体颜色
  5. 设置取消按钮和确定按钮是否可见等
    和往常一样,我们先来看看效果图


    Android 自定义Dialog的简单实现_第1张图片
    这里写图片描述

二、现在我们来简单看下项目结构图

Android 自定义Dialog的简单实现_第2张图片
这里写图片描述

核心文件是CustomDialog.java和styles主题样式,其它都是次要的。项目中我们只需要将CustomDialog文件和对应的xml布局widget_dialog以及drawable文件夹下的文件复制到自己的工程项目即可使用。

三、自定义CustomDialog的简单调用,很简单的几句代码,还有其他的方法调用,可以看CustomDialog的代码啦

  CustomDialog dialog = new CustomDialog(this, new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                switch (arg0.getId()) {
                    case R.id.dialog_btn_sure:
                        Toast.makeText(mContext, "重新拍照", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        });
        dialog.setMessage("您确定要重新拍照吗?");
        dialog.setTitle("温馨提示");
        dialog.setBtnSure("重新拍照");
        dialog.setBtnCancel("算了吧");
        dialog.setBtnSureColor(mContext.getResources().getColor(
                R.color.green));
        dialog.show();

四、现在就让我们来看看CustomDialog具体实现吧,代码写得很详细,这里我把代码贴出来,就不一一解释啦
(1)CustomDialog.java

package per.lijuan.customdialogdome;

import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * @author: lijuan
 * @description: 自定义提示dialog
 * @date: 2016-11-29
 * @time: 15:05
 */
public class CustomDialog extends Dialog {
    private TextView mTvMessage, mTvTitle;
    private Button mBtnCancel, mBtnSure;
    private LinearLayout mLlTitle, mLlContent;
    private Context mContext;
    private View.OnClickListener mListener;

    public CustomDialog(Context context, View.OnClickListener listener) {
        super(context, R.style.Alert_Dialog_Style);
        mListener = listener;
        mContext = context;
        init(context);
    }

    private void init(Context context) {
        View view = View.inflate(context, R.layout.widget_dialog, null);
        setContentView(view);
        init(view);
    }

    private void init(View v) {
        mLlTitle = (LinearLayout) v.findViewById(R.id.ll_title);
        mLlTitle.setVisibility(View.GONE);
        mLlContent = (LinearLayout) v.findViewById(R.id.ll_content);
        mTvTitle = (TextView) v.findViewById(R.id.tv_title);
        mTvMessage = (TextView) v.findViewById(R.id.tv_message);
        mBtnCancel = (Button) v.findViewById(R.id.dialog_btn_cancel);
        mBtnSure = (Button) v.findViewById(R.id.dialog_btn_sure);
        mBtnSure.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                dismiss();
                if (mListener != null)
                    mListener.onClick(arg0);

            }
        });
        mBtnCancel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                dismiss();
                if (mListener != null)
                    mListener.onClick(arg0);

            }
        });

        Window window = getWindow();
        WindowManager.LayoutParams params = window.getAttributes();
        params.gravity = Gravity.CENTER;
        params.alpha = 1.0f;
        params.width = ScreenUtil.getScreenWidth(mContext);
        window.setAttributes(params);
    }

    /**
     * 设置标题
     *
     * @param title
     */
    public void setTitle(String title) {
        mLlTitle.setVisibility(View.VISIBLE);
        mTvTitle.setText(title);
        mLlTitle.setBackgroundColor(mContext.getResources().getColor(
                R.color.green));
        mLlContent.setBackgroundColor(mContext.getResources().getColor(
                R.color.white));
    }

    /**
     * 设置内容
     *
     * @param message
     */
    public void setMessage(String message) {
        mTvMessage.setText(message);
    }

    /**
     * 设置确认按钮的文字
     *
     * @param sure
     */
    public void setBtnSure(String sure) {
        mBtnSure.setText(sure);
    }

    /**
     * 设置取消按钮的文字
     *
     * @param cancel
     */
    public void setBtnCancel(String cancel) {
        mBtnCancel.setText(cancel);
    }

    /**
     * 设置取消按钮的文字
     *
     * @param visible
     */
    public void setBtnCancelVisible(int visible) {
        mBtnCancel.setVisibility(visible);
        if (visible == View.GONE) {
            mBtnSure.setBackgroundResource(R.drawable.selector_ontouch);
        } else {
            mBtnSure.setBackgroundResource(R.drawable.selector_bottom_right_corner);
        }
    }

    /**
     * 设置标题的颜色
     *
     * @param color
     */
    public void setTitleColor(int color) {
        mTvTitle.setTextColor(color);
    }

    /**
     * 设置内容的颜色
     *
     * @param color
     */
    public void setMessageColor(int color) {
        mTvMessage.setTextColor(color);
    }

    /**
     * 确认按钮的颜色
     *
     * @param color
     */
    public void setBtnSureColor(int color) {
        mBtnSure.setTextColor(color);
    }

    /**
     * 确认取消的颜色
     *
     * @param color
     */
    public void setBtnCalcelColor(int color) {
        mBtnCancel.setTextColor(color);
    }

    /**
     * 设置自定义的view
     *
     * @param contentView
     */
    public void setCustomContentView(View contentView) {
        mLlContent.removeAllViews();
        mLlContent.addView(contentView);
    }

    /**
     * 设置确认是否有效
     *
     * @param enabled
     */
    public void setBtnSureEnable(boolean enabled) {
        mBtnSure.setEnabled(enabled);
        if (!enabled) {
            mBtnSure.setTextColor(mContext.getResources().getColor(
                    R.color.black));
        }
    }

    /**
     * 设置取消是否有效
     *
     * @param enabled
     */
    public void setBtnCancelEnable(boolean enabled) {
        mBtnCancel.setEnabled(enabled);
        if (!enabled) {
            mBtnCancel.setTextColor(mContext.getResources().getColor(
                    R.color.black));
        }
    }
}

(2)定义styles主题样式


    

(3)布局文件widget_dialog.xml




    

        

            
        

        

            

                
            
        

        

        

            

(4)其中还涉及到屏幕分辨率工具类ScreenUtil,这里就不贴出来啦,还记得我之前写过的一篇Android 屏幕分辨率工具类使用,有兴趣的可以看看
(5)selector_bottom_left_corner.xml



    
        
            

            
        
    
    
        
            

            
        
    

(6)selector_bottom_right_corner.xml



    
        
            

            
        
    
    
        
            

            
        
    

(7)selector_ontouch.xml



    
        
            
        
    
    
        
            
        
    

好了,本篇文章已经全部写完了,存在总结不到位的地方还望指导,感谢_
源码下载

你可能感兴趣的:(Android 自定义Dialog的简单实现)