总结一下开发中经常用到的工具方法。
/**
* 屏蔽EditText的复制粘贴功能
* @param editText
* @param isCopyAndPasteAble
*/
public static void copyAndPasteAble(EditText editText,boolean isCopyAndPasteAble){
/**
* 屏蔽复制粘贴功能
*/
editText.setLongClickable(isCopyAndPasteAble);
editText.setTextIsSelectable(isCopyAndPasteAble);
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
});
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
}
/**
* 设置EditText的提示信息字体大小
* @param editText
* @param hintTextSize
*/
public static void setEditTextHintTextSize(EditText editText,int hintTextSize){
SpannableString ss = new SpannableString(editText.getHint());//定义hint的值
AbsoluteSizeSpan ass = new AbsoluteSizeSpan(hintTextSize,true);//设置字体大小 true表示单位是sp
ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setHint(new SpannedString(ss));
}
/**
* 格式化数字,列如:将-123432423423.134 格式化为 -123,432,423,423.134
*
* @param value
* @return
*/
public static DecimalFormat formatter = new DecimalFormat("####.##");
public static String formatNumStyle(String value) {
// d=123345.12945;
if (!isNumber(value))
return value;
Double d = Double.valueOf(value);
BigDecimal bg = new BigDecimal(d);
// Logger.d("Utils formatMoney bg="+ bg);
double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
// Logger.d("Utils formatMoney f1="+ bg);
formatter.applyPattern(",###");
String str = formatter.format(f1);
if (".".equals(str))
str = "0";
return str;
}
/**
* 判断数据字符是否是数字(能转成数字的)
* @param strNumber 数字字符
* @return 是数字字符返回true,不是返回false
*/
public static boolean isNumber(String strNumber){
boolean bolResult = false;
BigDecimal temp;
try {
temp = new BigDecimal(strNumber);
bolResult = true;
} catch (NumberFormatException e) {
e.getStackTrace();
}
return bolResult;
}
public static boolean isNumber2(String str) {
String number = "0123456789-.";
int len = str.length();
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
if (number.indexOf(String.valueOf(c)) == -1) {
return false;
}
}
return true;
}
/**
* EditTextView 获取小数点后几位
*
* @param editText 控件
* @param s 内容
* @param i 位数
*/
public static void limitDecimals(EditText editText, CharSequence s, int i) {
//处理输入为小数点的后三位
if (s.toString().contains(".")) {
if (s.length() - 1 - s.toString().indexOf(".") > i) {
s = s.toString().subSequence(0, s.toString().indexOf(".") + i + 1);
editText.setText(s);
editText.setSelection(s.length());//光标位置
}
}
if (s.toString().trim().substring(0).equals(".")) {
s = "0" + s;
editText.setText(s);
editText.setSelection(i);
}
if (s.toString().startsWith("0") && s.toString().trim().length() > 1) {
if (!s.toString().substring(1, 2).equals(".")) {//beginIndex - 开始处的索引(包括)。endIndex - 结束处的索引(不包括)。
editText.setText(s.subSequence(0, 1));
editText.setSelection(1);
return;
}
}
}
/**
* 显示字符串的后n位,前面用“*”号代替
* @param str 要代替的字符串
* @param n 显示的位数
* @return
*/
public static String replaceSubString(String str,int n){
String sub="";
try {
sub = str.substring(str.length()-n,str.length());
StringBuffer sb=new StringBuffer();
for(int i=0;i<str.length()-n;i++){
sb=sb.append("*");
}
sub = sb.toString()+sub;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sub;
}
/**
* 生成0.0001的位数
* @param count
* @return
*/
public static StringBuffer creatNum(int count) {
StringBuffer sb = new StringBuffer();
sb.append("0.");
for(int i=1;i<count;i++){
sb.append("0");
}
sb.append("1");
return sb;
}
/**
* 正则表达式
* 去掉float后无用的0
* 还原科学计数法的数值
*/
public String clearZero(float number){
String s = String.valueOf(number);
if(s.indexOf(".") > 0){
//正则表达
s = s.replaceAll("0+?$", "");//去掉后面无用的零
s = s.replaceAll("[.]$", "");//如小数点后面全是零则去掉小数点
}
/**
*还原科学计数法
*/
if (s.indexOf("E")!=-1){
String sarr[] = s.split("E");
double res1 = Double.valueOf(sarr[0]);
int ci = Integer.valueOf(sarr[1]);
double cinum = 10;
if (ci>0){
for(int i=0;i<ci;i++){
cinum = cinum*10;
}
double res = res1*cinum;
String result = String.valueOf(res);
return result;
}else {
ci = Math.abs(ci);
StringBuffer sb = new StringBuffer();
sb.append("0.");
for(int i=1;i<ci;i++){
sb.append("0");
}
//去除1.0后面的.0
String d = String.valueOf(res1);
if(d.indexOf(".") > 0){
//正则表达
d = d.replaceAll("0+?$", "");//去掉后面无用的零
d = d.replaceAll("[.]$", "");//如小数点后面全是零则去掉小数点
}
sb.append(d);
return sb.toString();
}
}
return s;
}
/**
* 使用BigDecimal类进行操作,防止精度丢失
* 注意:new BigDecimal(...)填写构造函数的时候,一定要使用String,而不要使用float或者double,否则同样会引起精度丢失。
* @param num1
* @param num2
* @return
*/
public float BigDecimalSub(float num1,float num2){
BigDecimal x1 = new BigDecimal(Float.toString(num1));
BigDecimal x2 = new BigDecimal(Float.toString(num2));
return x1.subtract(x2).floatValue();
}
/**
* 使用BigDecimal类进行操作,防止精度丢失
* 注意:new BigDecimal(...)填写构造函数的时候,一定要使用String,而不要使用float或者double,否则同样会引起精度丢失。
* @param num1
* @param num2
* @return
*/
public float BigDecimalAdd(float num1,float num2){
BigDecimal x1 = new BigDecimal(Float.toString(num1));
BigDecimal x2 = new BigDecimal(Float.toString(num2));
return x1.add(x2).floatValue();
}