在項目開發中,經常會遇到各種通過彈框提示資訊的需求,主要都是通過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);
}
}