此文章作为utils积累使用
1、除法运算并保留任意位小数
/**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
* 定精度,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div( double v1, double v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
2、MD5加密
/**
* MD5加密
* <br>http://stackoverflow.com/questions/1057041/difference-between-java-and-php5-md5-hash
* <br>http://code.google.com/p/roboguice/issues/detail?id=89
*
* @param string 源字符串
* @return 加密后的字符串
*/
public static String md5(String string) {
byte[] hash = null;
try {
hash = MessageDigest.getInstance("MD5").digest(
string.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
StringBuilder hex = new StringBuilder(hash.length * 2);
for (byte b : hash) {
if ((b & 0xFF) < 0x10)
hex.append("0");
hex.append(Integer.toHexString(b & 0xFF));
}
return hex.toString();
}
3、表情字符串(如:[0]) 替换成表情 显示
/**
* 表情字符串([0]) 替换成表情 显示
* from OSC InputHelper.java
* @param res
* @param s
* @return
*/
public static Spannable displayEmoji(Resources res, CharSequence s) {
return displayEmoji(res, new SpannableString(s));
}
public static Spannable displayEmoji(Resources res, Spannable spannable){
String str = spannable.toString();
if (!str.contains(":") && !str.contains("[")) {
return spannable;
}
Pattern pattern = Pattern.compile("(\\[[^\\[\\]:\\s\\n]+\\])|(:[^:\\[\\]\\s\\n]+:)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()){
String emojiStr = matcher.group();
if (TextUtils.isEmpty(emojiStr)) continue;
int resId = getEmojiResId(emojiStr);
if (resId <= 0) continue;
Drawable drawable = res.getDrawable(resId);
if (drawable == null) continue;
drawable.setBounds(0, 0, (int) UIUtils.dp2px(20), (int) UIUtils.dp2px(20));
ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BOTTOM);
spannable.setSpan(span, matcher.start(), matcher.end(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
return spannable;
}
4、使系统更改字体大小无效
/**
* 使其系统更改字体大小无效
*/
private void initTextSize() {
Resources res = getResources();
Configuration config = new Configuration();
config.setToDefaults();
res.updateConfiguration(config, res.getDisplayMetrics());
}
将文字复制到剪切板
// 从API11开始android推荐使用android.content.ClipboardManager
// 为了兼容低版本我们这里使用旧版的android.text.ClipboardManager,虽然提示deprecated,但不影响使用。
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
// 将文本内容放到系统剪贴板里。
cm.setText(modelname + " " + regdate + " " + miles);