在项目开发中,经常会遇到各种通过弹框提示信息的需求,主要都是通过Dialog或者PopupWindow,由于在项目中可能需要多次用到,于是自己重写了2个类方便随时调用。
自定义Dialog类:
/**
* author:xc
* date: 2018/6/22
* desc:自定义布局的Dialog
*/
public class CustomBaseDialog extends Dialog {
/**
* 布局文件
*/
private View view;
private int width;
private int height;
public CustomBaseDialog(Context context, int layoutResID, int width, int height) {
super(context);
LayoutInflater layoutInflater = LayoutInflater.from(context);
view = layoutInflater.inflate(layoutResID, null);
this.width = width;
this.height = height;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(view, new ViewGroup.LayoutParams(width, height));
}
/**
* @param viewRes 控件id
* @param listener lister接口
* 控件点击事件
*/
public void addViewOnclick(int viewRes, View.OnClickListener listener) {
view.findViewById(viewRes).setOnClickListener(listener);
}
/**
* @param viewRes 控件id
* @param data 填充数据
* 初始化数据
*/
public void setTextViewData(int viewRes, String data) {
TextView textView = (TextView) view.findViewById(viewRes);
textView.setText(data);
}
}
自定义PopupWindow类:
package com.satd.yshfq.widget;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.PopupWindow;
import android.widget.TextView;
import java.lang.reflect.Method;
/**
* author:xc
* date: 2018/6/22
* desc:自定义布局的PopupWindow
*/
public class CustomBasePopupWindow extends PopupWindow {
/**
* 布局文件
*/
private View view;
/**
* @param context 上下文
* @param layoutResID 布局文件
* @param width 窗口宽度
* @param height 窗口高度
*/
public CustomBasePopupWindow(Context context, int layoutResID, int width, int height) {
view = LayoutInflater.from(context).inflate(layoutResID, null);
setWidth(width);
setHeight(height);
setContentView(view);
setFocusable(true);
setBackgroundDrawable(new ColorDrawable(0x00000000));
}
/**
* @param x 显示位置所在x坐标
* @param y 显示位置所在y坐标
*/
public void show(int x, int y) {
showAtLocation(view, Gravity.NO_GRAVITY, x, y);
}
/**
* 当点击外部不消失窗口,并且能相应外部控件的点击事件
*/
public void setPopupWindowTouchModal(boolean touchModal) {
Method method;
try {
method = PopupWindow.class.getDeclaredMethod("setTouchModal", boolean.class);
method.setAccessible(true);
method.invoke(this, touchModal);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param viewRes 控件id
* @param listener lister接口
* 控件点击事件
*/
public void addViewOnclick(int viewRes, View.OnClickListener listener) {
view.findViewById(viewRes).setOnClickListener(listener);
}
/**
* @param viewRes 控件id
* @param data 填充数据
* 初始化数据
*/
public void setTextViewData(int viewRes, String data) {
TextView textView = (TextView) view.findViewById(viewRes);
textView.setText(data);
}
}