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

Android开发中一些琐碎的小功能的实现

2016-06-02 11:23 447 查看
终于要上线了,说真的很开心,也蛮感谢那些帮助我的人,还有乐于分享可爱的人们。今天呢就来分享一个小功能,虽然很简单,但是基本上好多项目中都不会少了它。还有补充上一篇分享的关于tab标签和viewpager联动的文章中的优化,当时在写的时候比较匆忙就没有注意用了TextView虽然也是可以没有什么bug但是建议使用RadioButton,因为RadioButton主要用于多选一的操作,也就是当有多个选项,但永远只选择一个选项。好处大家知道了吧。废话不多说来记录一点最近用到的小知识吧。

1.清除缓存数据

直接上代码了,我会注释的比较清除,急用的可以直接拿去用哦。

//得到缓存数据的大小,可以直接调用次方法显示缓存大小在应用中
public static String getTotalCacheSize(Context context) throws Exception {
long cacheSize = getFolderSize(context.getCacheDir());
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
cacheSize += getFolderSize(context.getExternalCacheDir());
}
return getFormatSize(cacheSize);
}

//清除缓存数据可以直接调用这个方法
public static void clearAllCache(Context context) {
deleteDir(context.getCacheDir());
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
deleteDir(context.getExternalCacheDir());
}
}

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 true;
} else if (dir != null && dir.isFile()) {
return dir.delete();
}
return false;
}

// 获取文件
//Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
//Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
public static long getFolderSize(File file) throws Exception {
long size = 0;
try {
File[] fileList = file.listFiles();
for (int i = 0; i < fileList.length; i++) {
// 如果下面还有文件
if (fileList[i].isDirectory()) {
size = size + getFolderSize(fileList[i]);
} else {
size = size + fileList[i].length();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return size;
}

/**
* 格式化单位
*
* @param size
* @return
*/
public static String getFormatSize(double size) {
double kiloByte = size / 1024;
if (kiloByte < 1) {
//            return size + "Byte";
return "0K";
}

double megaByte = kiloByte / 1024;
if (megaByte < 1) {
BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "KB";
}

double gigaByte = megaByte / 1024;
if (gigaByte < 1) {
BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "MB";
}

double teraBytes = gigaByte / 1024;
if (teraBytes < 1) {
BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "GB";
}
BigDecimal result4 = new BigDecimal(teraBytes);
return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()
+ "TB";
}

在上面这段代码中有计算缓存大小以及清除缓存的方法都可以直接使用,比较简单大家都可以看懂就不细说了。

2.防连续多次点击数据造成的重复请求数据

代码如下

//防止按钮连续点击
private static long lastClickTime;
public static boolean isFastDoubleClick() {
long time = System.currentTimeMillis();
if (time - lastClickTime < 500) {
return true;
}
lastClickTime = time;
return false;
}

上面这段代码就是防止连续点击多次都去访问数据的方法,调用时在按钮点击监听事件里加入如下代码即可:

if (MyUtils.isFastDoubleClick()) {
return;
}


3.判断edittext输入是否是中文

代码如下

/**
* 判定输入汉字
* @param c
* @return
*/
public boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}

/**
* 检测String是否全是中文
* @param name
* @return
*/
public boolean checkNameChese(String name) {
boolean res = true;
char[] cTemp = name.toCharArray();
for (int i = 0; i < name.length(); i++) {
if (!isChinese(cTemp[i])) {
res = false;
break;
}
}
return res;
}


4.实现H5页面的一些点击操作

这个刚开始直接用webview去加载页面是点击不了的,但是加上如下代码就ok啦

WebSettings settings = web.getSettings();
settings.setJavaScriptEnabled(true);
settings.setBuiltInZoomControls(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
web.setWebViewClient(new WebViewClient());
web.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);

}

@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
return super.onJsAlert(view, url, message, result);
}

@Override
public boolean onJsConfirm(WebView view, String url,
String message, JsResult result) {
return super.onJsConfirm(view, url, message, result);
}

@Override
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, JsPromptResult result) {
return super.onJsPrompt(view, url, message, defaultValue, result);
}
});
web.loadUrl(url);

还有就是在点击返回按钮让它不是直接退出activity而是返回上一个H5页面,代码如下

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.top_toolbar_left:
if(web.canGoBack()){
web.goBack(); // goBack()表示返回WebView的上一页面
}else{
finish();
}
break;

}
}


终于有时间去更新studio了,拜拜。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: