博客
关于我
Android 开发常用的工具类(更新ing)
阅读量:623 次
发布时间:2019-03-13

本文共 5870 字,大约阅读时间需要 19 分钟。

Android开发实用工具与方法汇总

1. 测量View的宽高

增加View测量宽高的方法:

public static void measureWidthAndHeight(View view) {
int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
view.measure(widthMeasureSpec, heightMeasureSpec);
}

2. 压缩图片的方式

图片压缩需要谨慎处理:

public static Bitmap pressScaleCompress(Bitmap bitmap) {
ByteArrayOutputStream os = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 80, os);
byte[] bt = os.toByteArray();
Bitmap bitmap1 = BitmapFactory.decodeByteArray(bt, 0, bt.length);
return bitmap1;
}

widthheight压缩方法:

public static Bitmap pressScaleWidthHeightCompress(Bitmap bitmap) {
Matrix matrix = new Matrix();
matrix.postScale(0.6f, 0.6f);
Bitmap bitmap1 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
return bitmap1;
}

3. 倒计时工具类

倒计时工具实现:

public class CountDownUtils extends BaseCountDownTimer {
TextView tv;
public CountDownUtils(long millisInFuture, long countDownInterval, TextView tv) {
super(millisInFuture, countDownInterval);
this.tv = tv;
}
@Override
public void onTick(long millisUntilFinished) {
tv.setEnabled(false);
tv.setText("重新获取(" + millisUntilFinished / 1000 + "s)");
}
@Override
public void onFinish() {
tv.setText("重新验证");
tv.setEnabled(true);
}
}

4. 清除缓存工具类

彻底清除缓存:

public static void clearAllCache(Context context) {
deleteDir(context.getCacheDir());
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
deleteDir(context.getExternalCacheDir());
}
}

deleteDir方法实现:

private static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}

5._DOUBLE精确计算工具类

避免Double精度问题:

public static double add(Double value1, Double value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.add(b2).doubleValue();
}

6.图片保存到本地并返回路径

图片URIFile

public static String getRealPathFromUri(Context context, Uri uri) {
int sdkVersion = Build.VERSION.SDK_INT;
if (sdkVersion >= 19) {
return getRealPathFromUriAboveApi19(context, uri);
} else {
return getRealPathFromUriBelowAPI19(context, uri);
}
}

getDataColumn方法:

private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
String path = null;
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndexOrThrow(projection[0]);
path = cursor.getString(columnIndex);
}
} catch (Exception e) {
if (cursor != null) {
cursor.close();
}
}
return path;
}

7.网络请求Retrofit工具类

高效网络请求工具:

public class RetrofitManager {
private static final String BASE_URL = "http://yb.dashuibei.com/index.php/Home/";
private static RetrofitManager instance = null;
private final Retrofit retrofit;
private RetrofitManager(String baseUrl) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(buildOkHttpClient())
.build();
}
public static RetrofitManager getDefault() {
if (instance == null) {
instance = new RetrofitManager(BASE_URL);
}
return instance;
}
private OkHttpClient buildOkHttpClient() {
return new OkHttpClient.Builder()
.readTimeout(5000, TimeUnit.MILLISECONDS)
.writeTimeout(5000, TimeUnit.MILLISECONDS)
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.build();
}
}

8.关于时间

时间工具类实现:

public static String getStandardDate(String timeStr) {
long t = Long.parseLong(timeStr);
long currentTime = System.currentTimeMillis() - t * 1000;
StringBuilder sb = new StringBuilder();
long seconds = currentTime / 1000;
long minutes = (currentTime / 1000) / 60;
long hours = (currentTime / 1000) / 3600;
long days = (currentTime / 1000) / 86400;
if (days > 1) {
sb.append(String.format("%d天", days));
} else if (hours > 24) {
sb.append(String.format("1天"));
} else if (hours > 0) {
sb.append(String.format("%d小时", hours));
} else if (minutes > 0) {
sb.append(String.format("%d分钟", minutes));
} else if (seconds > 0) {
sb.append(String.format("%d秒", seconds));
} else {
sb.append("刚刚");
}
if (!sb.toString().equals("刚刚")) {
sb.append("前");
}
return sb.toString();
}

9.ूष意工具类

关闭软键盘方法:

public static void closeKeyboard(Activity context) {
((InputMethodManager) context.getSystemService(context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(context.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}

10.杂

Base64图片转字符串:

public static String Bitmap2StrByBase64(Bitmap bit) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bit.compress(Bitmap.CompressFormat.JPEG, 40, bos);
byte[] bytes = bos.toByteArray();
return Base64.encodeToString(bytes, Base64.DEFAULT);
}

欢迎加入技术交流群,共同探讨更多Android开发技巧!

转载地址:http://ctyoz.baihongyu.com/

你可能感兴趣的文章
nodejs模块——fs模块
查看>>
Nodejs模块、自定义模块、CommonJs的概念和使用
查看>>
nodejs生成多层目录和生成文件的通用方法
查看>>
nodejs端口被占用原因及解决方案
查看>>
Nodejs简介以及Windows上安装Nodejs
查看>>
nodejs系列之express
查看>>
nodejs系列之Koa2
查看>>
Nodejs连接mysql
查看>>
nodejs连接mysql
查看>>
NodeJs连接Oracle数据库
查看>>
nodejs配置express服务器,运行自动打开浏览器
查看>>
NodeMCU教程 http请求获取Json中文乱码解决方案
查看>>
Nodemon 深入解析与使用
查看>>
NodeSession:高效且灵活的Node.js会话管理工具
查看>>
node~ http缓存
查看>>
node不是内部命令时配置node环境变量
查看>>
node中fs模块之文件操作
查看>>
Node中同步与异步的方式读取文件
查看>>
node中的get请求和post请求的不同操作【node学习第五篇】
查看>>
Node中的Http模块和Url模块的使用
查看>>