1.键盘的状态 我们知道。Android中我们不能直接获取键盘的是否弹出状态。所以只能通过其他方法去获取。
最蠢的也是最直接的方法也就是通过获取我们View的底部在屏幕的高度。
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect outRect = new Rect();
View decorView = ((Activity) getContext()).getWindow().getDecorView();
decorView.getWindowVisibleDisplayFrame(outRect);
int height = decorView.getRootView().getHeight();
int diff = height - outRect.bottom;
if (diff > 300) {
//jian pan tan chu
closeDeleteItem();
} else {
//jian pan xiao shi
}
}
});
2.时间转换工具类
/*
* @param int timeFrom 是时间,单位是毫秒
* 如果间隔时间是大于timeFrom返回的是false;
* 如果间隔时间是小于timeFrom返回的是true;
* */
public static boolean isFastClick(int timeFrom) {
long time = System.currentTimeMillis();
if (time - lastClickTime < timeFrom) {
lastClickTime = time;
return true;
}
lastClickTime = time;
return false;
}
/**
* 将毫秒转化为 0:00的格式字符串
*
* @param time 毫秒的数字大小
* @return
*/
public static String getTimeFromInt(long time) {
if (time <= 0) {
return "0:00";
}
int secondnd = ((int) time / 1000) / 60;
int million = ((int) time / 1000) % 60;
String mSecondnd = secondnd >= 10 ? String.valueOf(secondnd) : "0" + String.valueOf(secondnd);
String mMillion = million >= 10 ? String.valueOf(million) : "0" + String.valueOf(million);
return mSecondnd + ":" + mMillion;
}
/**
* @param time
* 判断时间是否今天,今年的显示格式
* @return
*/
public static String formatDateTime(long time) {
SimpleDateFormat format;
Date date = new Date(time);
Calendar current = Calendar.getInstance();
Calendar today = Calendar.getInstance(); //今天
today.set(Calendar.YEAR, current.get(Calendar.YEAR));
today.set(Calendar.MONTH, current.get(Calendar.MONTH));
today.set(Calendar.DAY_OF_MONTH, current.get(Calendar.DAY_OF_MONTH));
// Calendar.HOUR——12小时制的小时数 Calendar.HOUR_OF_DAY——24小时制的小时数
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
LogUtils.d("date", current.get(Calendar.YEAR) + " " + today.get(Calendar.YEAR));
current.setTime(date);
if (current.after(today))
format = new SimpleDateFormat("HH:mm");
else if (current.get(Calendar.YEAR) == today.get(Calendar.YEAR))
format = new SimpleDateFormat("MM月dd日");
else
format = new SimpleDateFormat("yyyy-MM-dd");
return format.format(time);
}
/**
* 将时间戳转为代表"距现在多久之前"的字符串
*
* @param timeStr 时间戳
* @return
*/
public static String getStandardDate(String timeStr) {
StringBuffer sb = new StringBuffer();
long t = Long.parseLong(timeStr);
long time;
if (timeStr.length() == 10) {
time = System.currentTimeMillis() - (t * 1000);
} else {
time = System.currentTimeMillis() - (t);
}
long mill = time / 1000;//秒前
//返回不小于当前整数的整数
long minute = (time / 60 / 1000);// 分钟前
long hour = time / 60 / 60 / 1000;// 小时
long day = time / 24 / 60 / 60 / 1000;// 天前
if (day > 0) {
if (day / 365 > 0)
sb.append((day / 365) + "年前");
else if (day / 30 > 0)
sb.append((day / 30) + "个月前");
else
sb.append(day + "天前");
return sb.toString();
}
if (hour > 0) {
if (hour / 24 > 0)
sb.append((hour / 24) + "天前");
else
sb.append(hour + "小时前");
return sb.toString();
}
if (minute > 0) {
if (minute / 60 > 0)
sb.append((minute / 60) + "小时前");
else
sb.append(minute + "分钟前");
return sb.toString();
}
if (mill > 3) {
if (mill / 60 > 0)
sb.append((mill / 60) + "分钟前");
else
sb.append(mill + "秒前");
}
return "刚刚";
}
/**
* 将时间戳根据日期转化为 日期 昨天 几时几分
*
* @param time
* @return
*/
public static String parseDate(String time) {
long createTime;
String ret = "";
try {
if (time.length() == 10) {
createTime = Long.parseLong(time + "000");
} else {
createTime = Long.parseLong(time);
}
Date date = new Date(createTime);
if (TimeUtils.isYesterday(date)) {
ret = "昨天";
} else if (TimeUtils.isNowYear(date)) {
ret = TimeUtils.getHourByTimeStamp(createTime) + ":" + TimeUtils.getMinuteByTimeStamp(createTime);
} else {
ret = TimeUtils.getMonthByTimeStamp(createTime) + "月" + TimeUtils.getDayByTimeStamp(createTime) + "日";
}
return ret;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 根据年 月 获取对应的月份 天数
*/
public static int getDaysByYearMonth(int year, int month) {
int maxDate = 0;
if (month == 2) {
Calendar a = Calendar.getInstance();
a.set(Calendar.YEAR, year);
a.set(Calendar.MONTH, month - 1);
a.set(Calendar.DATE, 1);
a.roll(Calendar.DATE, -1);
maxDate = a.get(Calendar.DATE);
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
maxDate = 30;
} else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
maxDate = 31;
}
return maxDate;
}
/**
* 将时间戳转为特定格式的時間
*
* @param milliseconds 时间戳
* @param format 时间戳
* @return
*/
public static String getDateType(String milliseconds, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
long time = 0;
String date = "";
try {
time = Long.parseLong(milliseconds);
} catch (Exception e) {
return date;
}
if ("0".equals(milliseconds)) {
return "至今";
} else if (milliseconds.length() == 10) {
date = sdf.format(new Date(time * 1000));
} else {
date = sdf.format(new Date(time));
}
if (format.length() > 6) {// format yyyy/MM/dd
if ('0' == date.charAt(5)) {
date = date.substring(0, 5) + date.substring(6);
}
} else {// format MM/dd
if ('0' == date.charAt(3)) {
date = date.substring(0, 3) + date.substring(4);
}
}
return date;
}
/**
* 将时间戳转为特定格式的時間
*
* @param milliseconds 时间戳
* @param format 时间戳
* @return
*/
public static String getDateType(long milliseconds, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
String date;
if (0 == milliseconds) {
return "至今";
} else if ((milliseconds + "").length() == 10) {
date = sdf.format(new Date(milliseconds * 1000));
} else {
date = sdf.format(new Date(milliseconds));
}
if ('0' == date.charAt(5)) {
date = date.substring(0, 5) + date.substring(6);
}
return date;
}
/**
* 日期格式字符串转换成时间戳
*
* @param date 字符串日期
* @param format 如:yyyy-MM-dd HH:mm:ss
* @return
*/
public static long date2TimeStamp(String date, String format) {
try {
if (date.length() > 6 && '月' == date.charAt(6)) {
date = date.substring(0, 5) + "0" + date.substring(5);
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.parse(date).getTime();
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
3.验证邮箱、qq、微信 正则表达式
/**
* 验证正确邮箱
*
* @param email
* @return
*/
public static boolean isEmail(String email) {//邮箱判断正则表达式
Pattern pattern = Pattern
.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
Matcher mc = pattern.matcher(email);
return mc.matches();
}
/**
* 验证QQ号码是否正确
* @param qq
* @return
*/
public static boolean isQQ(String qq)
{
String regex ="[1-9][0-9]{4,14}";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(qq);
return m.matches();
}
/**
* 验证微信号码是否正确
* @param weChat
* @return
*/
public static boolean isWeChat(String weChat){
String regex = "[a-zA-Z][a-zA-Z0-9_-]{5,19}";
Pattern pattern = Pattern.compile(regex);
Matcher mc = pattern.matcher(weChat);
return mc.matches();
}