您的位置:首页 > 移动开发 > Android开发

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);

}

}

未完待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: