Android知识点总结
2016-06-17 10:10
525 查看
1.像素密度density。
在xml中设置的dp,dip,px等单位跟在代码中写的单位是不一样的
在代码中设置控件宽高使用的单位为px也就是像素,由于不同的手机像素密度的不同所以用px为单位的控件在不同手机中显示大小便有了不同,如何解决这一问题呢?
首先要获取到不同手机的像素密度,像素密度就是DisplayMetrics里的density参数。当density=1.0时,表示一个dp值对应一个px值;当density=1.5时,表示两个dp值对应三个px值;当density=2.0时,表示一个dp值对应两个px值
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
2.想获取屏幕大小
DisplayMetrics dm = getResources().getDisplayMetrics();
displayWidth = dm.widthPixels;
displayHeight = dm.heightPixels;
在Adapter等Context里面使用下面方法获取屏幕分辨率大小
[java] view
plain copy
public static Point getSizeNew(Context ctx) {
WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
Point size = new Point();
size.x = dm.widthPixels;
size.y = dm.heightPixels;
return size;
}
3.字符串的合法验证
app经常要检查用户输入信息是否正确,例如手机号是否合法、电子邮箱是否合法、身份证号是否合法等等。这种合法性验证就得用到正则表达式,对应到具体的处理类,便是Pattern和Matcher。Pattern是预定义校验规则,而Matcher则是进行校验判断;另外,从java1.4开始,对于简单的格式校验,也可直接调用String类的matches方法。常用的字符串校验场景与相应的示例代码如下:
[java] view
plain copy
public static boolean isPhoneByPattern(String phone) {
String regex = "^1[3|4|5|8]\\d{9}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(phone);
return matcher.matches();
}
public static boolean isPhoneByString(String phone) {
// "[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。
String regex = "[1][358]\\d{9}";
return phone.matches(regex);
}
public static boolean isEmailByPattern(String email) {
String regex = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}
public static boolean isEmailByString(String email) {
String regex = "([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)";
return email.matches(regex);
}
public static boolean isICNOByPattern(String icno) {
String regex15 = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";
Pattern pattern15 = Pattern.compile(regex15);
Matcher matcher15 = pattern15.matcher(icno);
String regex18 = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|x|X)$";
Pattern pattern18 = Pattern.compile(regex18);
Matcher matcher18 = pattern18.matcher(icno);
return (matcher15.matches() || matcher18.matches());
}
public static boolean isICNOByString(String icno) {
String regex15 = "[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}";
String regex18 = "[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|x|X)";
return (icno.matches(regex15) || icno.matches(regex18));
}
4.日期的运算
java的Date类型无法直接做加减操作,比如当前时间加一个月,或者减10天,Date类型是处理不了的,必须要借助于Calendar类型。先把Date类型转换为Calendar类型,然后对Calendar进行加减运算,最后再把Calendar类型转换为Date类型。代码如下:
[java] view
plain copy
import java.util.Calendar;
import java.util.Date;
public class AddDate {
public static Date addDate(Date date, int dayNum) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_YEAR, dayNum);
return calendar.getTime();
}
public static Date addMonth(Date date, int monthNum) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, monthNum);
return calendar.getTime();
}
public static void main(String[] arg) {
Date old_date = new Date();
Date add_day = addDate(old_date, -10);
Date add_month = addMonth(old_date, 1);
System.out.println("old_date=" + old_date + ", add_day=" + add_day + ", add_month=" + add_month);
}
}
未完待续。。。
在xml中设置的dp,dip,px等单位跟在代码中写的单位是不一样的
在代码中设置控件宽高使用的单位为px也就是像素,由于不同的手机像素密度的不同所以用px为单位的控件在不同手机中显示大小便有了不同,如何解决这一问题呢?
首先要获取到不同手机的像素密度,像素密度就是DisplayMetrics里的density参数。当density=1.0时,表示一个dp值对应一个px值;当density=1.5时,表示两个dp值对应三个px值;当density=2.0时,表示一个dp值对应两个px值
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
2.想获取屏幕大小
DisplayMetrics dm = getResources().getDisplayMetrics();
displayWidth = dm.widthPixels;
displayHeight = dm.heightPixels;
在Adapter等Context里面使用下面方法获取屏幕分辨率大小
[java] view
plain copy
public static Point getSizeNew(Context ctx) {
WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
Point size = new Point();
size.x = dm.widthPixels;
size.y = dm.heightPixels;
return size;
}
3.字符串的合法验证
app经常要检查用户输入信息是否正确,例如手机号是否合法、电子邮箱是否合法、身份证号是否合法等等。这种合法性验证就得用到正则表达式,对应到具体的处理类,便是Pattern和Matcher。Pattern是预定义校验规则,而Matcher则是进行校验判断;另外,从java1.4开始,对于简单的格式校验,也可直接调用String类的matches方法。常用的字符串校验场景与相应的示例代码如下:
[java] view
plain copy
public static boolean isPhoneByPattern(String phone) {
String regex = "^1[3|4|5|8]\\d{9}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(phone);
return matcher.matches();
}
public static boolean isPhoneByString(String phone) {
// "[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。
String regex = "[1][358]\\d{9}";
return phone.matches(regex);
}
public static boolean isEmailByPattern(String email) {
String regex = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}
public static boolean isEmailByString(String email) {
String regex = "([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)";
return email.matches(regex);
}
public static boolean isICNOByPattern(String icno) {
String regex15 = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";
Pattern pattern15 = Pattern.compile(regex15);
Matcher matcher15 = pattern15.matcher(icno);
String regex18 = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|x|X)$";
Pattern pattern18 = Pattern.compile(regex18);
Matcher matcher18 = pattern18.matcher(icno);
return (matcher15.matches() || matcher18.matches());
}
public static boolean isICNOByString(String icno) {
String regex15 = "[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}";
String regex18 = "[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|x|X)";
return (icno.matches(regex15) || icno.matches(regex18));
}
4.日期的运算
java的Date类型无法直接做加减操作,比如当前时间加一个月,或者减10天,Date类型是处理不了的,必须要借助于Calendar类型。先把Date类型转换为Calendar类型,然后对Calendar进行加减运算,最后再把Calendar类型转换为Date类型。代码如下:
[java] view
plain copy
import java.util.Calendar;
import java.util.Date;
public class AddDate {
public static Date addDate(Date date, int dayNum) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_YEAR, dayNum);
return calendar.getTime();
}
public static Date addMonth(Date date, int monthNum) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, monthNum);
return calendar.getTime();
}
public static void main(String[] arg) {
Date old_date = new Date();
Date add_day = addDate(old_date, -10);
Date add_month = addMonth(old_date, 1);
System.out.println("old_date=" + old_date + ", add_day=" + add_day + ", add_month=" + add_month);
}
}
未完待续。。。
相关文章推荐
- android编码规范小结
- 技德科技宣布与Android-x86项目官方合作 并推出多款安卓PC
- android 蓝牙编程重点---如何发送和接收16进制数据
- Android流式标签
- Android系统下的几个可读写目录
- Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
- android 事件传递
- android6.0源码分析之Runtime的初始化
- mac 上 卸载 android studio
- 轻松实现Android仿淘宝地区选择功能
- Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
- Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
- [Android官方Demo系列] PageTransformer潜藏滑动
- Android消息传递之组件间传递消息(二)
- Android Dialog
- android应用程序第12课:RelativeLayout
- android使用微软EWS发送邮件
- Android 用代码设置Shape,corners,Gradient
- 毛玻璃之android.support.v8.renderscript.RSRuntimeException
- Android实战技巧:ViewStub的应用