开发中经常用到的工具类
来源:互联网 发布:对网络ip剧改编的看法 编辑:程序博客网 时间:2024/05/22 04:49
在开发中,我们经常会用到一些开发工具类,比如网络请求(当然,网络请求有成熟的框架,在一些大的项目中确实有可用之处,但是在小项目中用框架的话就有点“杀鸡用了杀牛刀了”),所以我们会写一些功能少的框架,再比如说在开发中我们会为了开发的简单,代码易修改和易添加,对代码的重构有很大的帮助
1、在mvc / map 这种开发模式中,model层也就是数据层,一般小的项目中,在android中不会有数据库在前端出现,这时我们为了将数据层归纳的详细,一般会将要使用到的需要保存在sharedpreferences等,和数据层联系起来,比如:在res/values 下建立config.xml文件 将要保存的字段写在里面
<?xml version="1.0" encoding="utf-8"?><resources> <string name="client_login_sessionToken">client_login_sessionToken</string><!--存储token值--></resources>
然后在自己的工具类中 创建字段 并且创建读取该文件的方法
public static final String CLIENT_LOGIN_SESSIONTOKEN = "client_login_sessionToken";/** * 读取配置文件 * @param name * @return */public static String getConfigString(String name){ int config = mContext.getResources().getIdentifier(name, "config", "com.kerust.client"); return mContext.getResources().getString(config);}
在加上写的保存sharedpreferences的工具类
public static void put(Context context, String key, Object object) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); if (object instanceof String) { editor.putString(key, (String) object); } else if (object instanceof Integer) { editor.putInt(key, (Integer) object); } else if (object instanceof Boolean) { editor.putBoolean(key, (Boolean) object); } else if (object instanceof Float) { editor.putFloat(key, (Float) object); } else if (object instanceof Long) { editor.putLong(key, (Long) object); } else { editor.putString(key, object.toString()); } SharedPreferencesCompat.apply(editor);}
在要使用的地方
SPUtils.put(mContext, SettingsInfo.getConfigString( //将token保存到本地 SettingsInfo.CLIENT_LOGIN_SESSIONTOKEN),sessionToken);
这样将自己要保存的数据保存起来
好了,这只是我自己在开发的过程中的自己的编程习惯
接下来说几个会经常用得到的工具类
1、保存sharedpreferences的工具类
/** * 保存在手机里面的文件名 */public static final String FILE_NAME = "Launcher_client_share_data";/** * 保存数据的方法,
我们需要拿到保存数据的具体类型,
然后根据类型调用不同的保存方法 * * @param context * @param key * @param object */public static void put(Context context, String key, Object object) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); if (object instanceof String) { editor.putString(key, (String) object); } else if (object instanceof Integer) { editor.putInt(key, (Integer) object); } else if (object instanceof Boolean) { editor.putBoolean(key, (Boolean) object); } else if (object instanceof Float) { editor.putFloat(key, (Float) object); } else if (object instanceof Long) { editor.putLong(key, (Long) object); } else { editor.putString(key, object.toString()); } SharedPreferencesCompat.apply(editor);}/** * 得到保存数据的方法,
我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 *
* @param context * @param key * @param defaultObject * @return */public static Object get(Context context, String key, Object defaultObject){ SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); if (defaultObject instanceof String) { return sp.getString(key, (String) defaultObject); } else if (defaultObject instanceof Integer) { return sp.getInt(key, (Integer) defaultObject); } else if (defaultObject instanceof Boolean) { return sp.getBoolean(key, (Boolean) defaultObject); } else if (defaultObject instanceof Float) { return sp.getFloat(key, (Float) defaultObject); } else if (defaultObject instanceof Long) { return sp.getLong(key, (Long) defaultObject); } return null;
只是常用的保存和取值
2、加密算法
/** * DES算法,加密 * * @param data 待加密字符串 * @param key 需要加密的业务类型 * @return 加密后的字节数组,一般结合Base64编码使用 * @throws Exception */public static String encode(String key, String data) { if (data == null) return null; try { String value = SettingInfo.getDESValue(key); DESKeySpec dks = new DESKeySpec(value.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); // key的长度不能够小于8位字节 Key secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(ALGORITHM_DES); IvParameterSpec iv = new IvParameterSpec("12345678".getBytes()); AlgorithmParameterSpec paramSpec = iv; cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec); byte[] bytes = cipher.doFinal(data.getBytes()); return byte2String(bytes); } catch (Exception e) { e.printStackTrace(); return data; }}/** * DES算法,解密 * * @param data 待解密字符串 * @param key 需要解密的业务类型 * @return 解密后的字节数组 * @throws Exception 异常 */public static String decode(String key, String data) { if (data == null) return null; try { String value = SettingInfo.getDESValue(key); DESKeySpec dks = new DESKeySpec(value.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); // key的长度不能够小于8位字节 Key secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(ALGORITHM_DES); IvParameterSpec iv = new IvParameterSpec("12345678".getBytes()); AlgorithmParameterSpec paramSpec = iv; cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec); return new String(cipher.doFinal(byte2hex(data.getBytes()))); } catch (Exception e) { e.printStackTrace(); return data; }}/** * 二行制转字符串 * * @param b * @return String */private static String byte2String(byte[] b) { StringBuilder hs = new StringBuilder(); String stmp; for (int n = 0; b != null && n < b.length; n++) { stmp = Integer.toHexString(b[n] & 0XFF); if (stmp.length() == 1) hs.append('0'); hs.append(stmp); } return hs.toString().toUpperCase(Locale.CHINA);}/** * 二进制转化成16进制 * * @param b * @return byte */private static byte[] byte2hex(byte[] b) { if ((b.length % 2) != 0) throw new IllegalArgumentException(); byte[] b2 = new byte[b.length / 2]; for (int n = 0; n < b.length; n += 2) { String item = new String(b, n, 2); b2[n / 2] = (byte) Integer.parseInt(item, 16); } return b2;}/** * md5文件加密的方式 * * @param file * @return md5加密的返回加密后的值 * @throws IOException */public static String md5(File file) throws IOException { MessageDigest messagedigest = null; FileInputStream in = null; FileChannel ch = null; byte[] encodeBytes = null; try { messagedigest = MessageDigest.getInstance("MD5"); in = new FileInputStream(file); ch = in.getChannel(); MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length()); messagedigest.update(byteBuffer); encodeBytes = messagedigest.digest(); } catch (NoSuchAlgorithmException neverHappened) { throw new RuntimeException(neverHappened); } finally { closeQuietly(in); closeQuietly(ch); } return toHexString(encodeBytes);}/** * MD5 字符串的加密方式 * * @param string * @return 加密后的字符串 */public static String md5(String string) { byte[] encodeBytes = null; try { encodeBytes = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8")); } catch (NoSuchAlgorithmException neverHappened) { throw new RuntimeException(neverHappened); } catch (UnsupportedEncodingException neverHappened) { throw new RuntimeException(neverHappened); } return toHexString(encodeBytes);}public static void closeQuietly(Closeable closeable) { if (closeable != null) { try { closeable.close(); } catch (Throwable ignored) { Log.d(ignored.getMessage(), ignored + ""); } }}private static final char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};public static String toHexString(byte[] bytes) { if (bytes == null) return ""; StringBuilder hex = new StringBuilder(bytes.length * 2); for (byte b : bytes) { hex.append(hexDigits[(b >> 4) & 0x0F]); hex.append(hexDigits[b & 0x0F]); } return hex.toString();}
3、SD卡保存
/** * 判断SDCard是否可用 * * @return */public static boolean isSDCardEnable(){ return Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED);}/** * 获取SD卡路径 * * @return */public static String getSDCardPath(){ return Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;}/** * 获取SD卡的剩余容量 单位byte * * @return */public static long getSDCardAllSize(){ if (isSDCardEnable()) { StatFs stat = new StatFs(getSDCardPath()); // 获取空闲的数据块的数量 long availableBlocks = (long) stat.getAvailableBlocks() - 4; // 获取单个数据块的大小(byte) long freeBlocks = stat.getAvailableBlocks(); return freeBlocks * availableBlocks; } return 0;}/** * 获取指定路径所在空间的剩余可用容量字节数,单位byte * * @param filePath * @return 容量字节 SDCard可用空间,内部存储可用空间 */public static long getFreeBytes(String filePath){ // 如果是sd卡的下的路径,则获取sd卡可用容量 if (filePath.startsWith(getSDCardPath())) { filePath = getSDCardPath(); } else {// 如果是内部存储的路径,则获取内存存储的可用容量 filePath = Environment.getDataDirectory().getAbsolutePath(); } StatFs stat = new StatFs(filePath); long availableBlocks = (long) stat.getAvailableBlocks() - 4; return stat.getBlockSize() * availableBlocks;}/** * 获取系统存储路径 * * @return */public static String getRootDirectoryPath(){ return Environment.getRootDirectory().getAbsolutePath();}4、File操作类
/** * read file * * @param filePath * @return if file not exist, return null, else return content of file * @throws RuntimeException if an error occurs while operator BufferedReader */public static String readFile(String filePath) { String fileContent = ""; File file = new File(filePath); if (!file.isFile()) { return null; } BufferedReader reader = null; try { InputStreamReader is = new InputStreamReader(new FileInputStream(file)); reader = new BufferedReader(is); String line; while ((line = reader.readLine()) != null) { fileContent += line + " "; } reader.close(); return fileContent; } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return fileContent;}/** * write file * * @param filePath * @param content * @param append is append, if true, write to the end of file, else clear content of file and write into it * @return return false if content is empty, true otherwise * @throws RuntimeException if an error occurs while operator FileWriter */public static boolean writeFile(String filePath, String content, boolean append) { if (filePath == null || filePath.length() == 0) { return false; } FileWriter fileWriter = null; try { makeDirs(filePath); fileWriter = new FileWriter(filePath, append); fileWriter.write(content); fileWriter.close(); return true; } catch (IOException e) { throw new RuntimeException("IOException occurred. ", e); } finally { if (fileWriter != null) { try { fileWriter.close(); } catch (IOException e) { throw new RuntimeException("IOException occurred. ", e); } } }}/** * write file * * @param filePath * @param contentList * @param append is append, if true, write to the end of file, else clear content of file and write into it * @return return false if contentList is empty, true otherwise * @throws RuntimeException if an error occurs while operator FileWriter */public static boolean writeFile(String filePath, List<String> contentList, boolean append) { if (contentList == null || contentList.size() == 0) { return false; } FileWriter fileWriter = null; try { makeDirs(filePath); fileWriter = new FileWriter(filePath, append); int i = 0; for (String line : contentList) { if (i++ > 0) { fileWriter.write("\r\n"); } fileWriter.write(line); } fileWriter.close(); return true; } catch (IOException e) { throw new RuntimeException("IOException occurred. ", e); } finally { if (fileWriter != null) { try { fileWriter.close(); } catch (IOException e) { throw new RuntimeException("IOException occurred. ", e); } } }}/** * write file, the string will be written to the begin of the file * * @param filePath * @param content * @return */public static boolean writeFile(String filePath, String content) { return writeFile(filePath, content, false);}/** * write file, the string list will be written to the begin of the file * * @param filePath * @param contentList * @return */public static boolean writeFile(String filePath, List<String> contentList) { return writeFile(filePath, contentList, false);}/** * write file, the bytes will be written to the begin of the file * * @param filePath * @param stream * @return * @see {@link #writeFile(String, InputStream, boolean)} */public static boolean writeFile(String filePath, InputStream stream) { return writeFile(filePath, stream, false);}/** * write file * * @param stream the input stream * @param append if <code>true</code>, then bytes will be written to the end of the file rather than the beginning * @return return true * @throws RuntimeException if an error occurs while operator FileOutputStream */public static boolean writeFile(String filePath, InputStream stream, boolean append) { return writeFile(filePath != null ? new File(filePath) : null, stream, append);}/** * write file, the bytes will be written to the begin of the file * * @param file * @param stream * @return * @see {@link #writeFile(File, InputStream, boolean)} */public static boolean writeFile(File file, InputStream stream) { return writeFile(file, stream, false);}/** * write file * * @param file the file to be opened for writing. * @param stream the input stream * @param append if <code>true</code>, then bytes will be written to the end of the file rather than the beginning * @return return true * @throws RuntimeException if an error occurs while operator FileOutputStream */public static boolean writeFile(File file, InputStream stream, boolean append) { OutputStream o = null; try { makeDirs(file.getAbsolutePath()); o = new FileOutputStream(file, append); byte data[] = new byte[1024]; int length = -1; while ((length = stream.read(data)) != -1) { o.write(data, 0, length); } o.flush(); return true; } catch (FileNotFoundException e) { throw new RuntimeException("FileNotFoundException occurred. ", e); } catch (IOException e) { throw new RuntimeException("IOException occurred. ", e); } finally { if (o != null) { try { o.close(); stream.close(); } catch (IOException e) { throw new RuntimeException("IOException occurred. ", e); } } }}/** * move file * * @param sourceFilePath * @param destFilePath */public static void moveFile(String sourceFilePath, String destFilePath) { if (TextUtils.isEmpty(sourceFilePath) || TextUtils.isEmpty(destFilePath)) { throw new RuntimeException("Both sourceFilePath and destFilePath cannot be null."); } moveFile(new File(sourceFilePath), new File(destFilePath));}/** * move file * * @param srcFile * @param destFile */public static void moveFile(File srcFile, File destFile) { boolean rename = srcFile.renameTo(destFile); if (!rename) { copyFile(srcFile.getAbsolutePath(), destFile.getAbsolutePath()); deleteFile(srcFile.getAbsolutePath()); }}/** * copy file * * @param sourceFilePath * @param destFilePath * @return * @throws RuntimeException if an error occurs while operator FileOutputStream */public static boolean copyFile(String sourceFilePath, String destFilePath) { InputStream inputStream = null; try { inputStream = new FileInputStream(sourceFilePath); } catch (FileNotFoundException e) { throw new RuntimeException("FileNotFoundException occurred. ", e); } return writeFile(destFilePath, inputStream);}/** * read file to string list, a element of list is a line * * @param filePath * @param charsetName The name of a supported {@link java.nio.charset.Charset </code>charset<code>} * @return if file not exist, return null, else return content of file * @throws RuntimeException if an error occurs while operator BufferedReader */public static List<String> readFileToList(String filePath, String charsetName) { File file = new File(filePath); List<String> fileContent = new ArrayList<String>(); if (file == null || !file.isFile()) { return null; } BufferedReader reader = null; try { InputStreamReader is = new InputStreamReader(new FileInputStream(file), charsetName); reader = new BufferedReader(is); String line = null; while ((line = reader.readLine()) != null) { fileContent.add(line); } reader.close(); return fileContent; } catch (IOException e) { throw new RuntimeException("IOException occurred. ", e); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { throw new RuntimeException("IOException occurred. ", e); } } }}/** * get file name from path, not include suffix * <p/> * getFileNameWithoutExtension(null) = null * getFileNameWithoutExtension("") = "" * getFileNameWithoutExtension(" ") = " " * getFileNameWithoutExtension("abc") = "abc" * getFileNameWithoutExtension("a.mp3") = "a" * getFileNameWithoutExtension("a.b.rmvb") = "a.b" * getFileNameWithoutExtension("c:\\") = "" * getFileNameWithoutExtension("c:\\a") = "a" * getFileNameWithoutExtension("c:\\a.b") = "a" * getFileNameWithoutExtension("c:a.txt\\a") = "a" * getFileNameWithoutExtension("/home/admin") = "admin" * getFileNameWithoutExtension("/home/admin/a.txt/b.mp3") = "b" * * @param filePath * @return file name from path, not include suffix * @see */public static String getFileNameWithoutExtension(String filePath) { if (filePath == null || filePath.length() == 0) { return filePath; } int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR); int filePosi = filePath.lastIndexOf(File.separator); if (filePosi == -1) { return (extenPosi == -1 ? filePath : filePath.substring(0, extenPosi)); } if (extenPosi == -1) { return filePath.substring(filePosi + 1); } return (filePosi < extenPosi ? filePath.substring(filePosi + 1, extenPosi) : filePath.substring(filePosi + 1));}/** * get file name from path, include suffix * <p/> * getFileName(null) = null * getFileName("") = "" * getFileName(" ") = " " * getFileName("a.mp3") = "a.mp3" * getFileName("a.b.rmvb") = "a.b.rmvb" * getFileName("abc") = "abc" * getFileName("c:\\") = "" * getFileName("c:\\a") = "a" * getFileName("c:\\a.b") = "a.b" * getFileName("c:a.txt\\a") = "a" * getFileName("/home/admin") = "admin" * getFileName("/home/admin/a.txt/b.mp3") = "b.mp3" * * @param filePath * @return file name from path, include suffix */public static String getFileName(String filePath) { if (filePath == null || filePath.length() == 0) { return filePath; } int filePosi = filePath.lastIndexOf(File.separator); return (filePosi == -1) ? filePath : filePath.substring(filePosi + 1);}/** * get folder name from path * <p/> * getFolderName(null) = null * getFolderName("") = "" * getFolderName(" ") = "" * getFolderName("a.mp3") = "" * getFolderName("a.b.rmvb") = "" * getFolderName("abc") = "" * getFolderName("c:\\") = "c:" * getFolderName("c:\\a") = "c:" * getFolderName("c:\\a.b") = "c:" * getFolderName("c:a.txt\\a") = "c:a.txt" * getFolderName("c:a\\b\\c\\d.txt") = "c:a\\b\\c" * getFolderName("/home/admin") = "/home" * getFolderName("/home/admin/a.txt/b.mp3") = "/home/admin/a.txt" * * @param filePath * @return */public static String getFolderName(String filePath) { if (filePath == null || filePath.length() == 0) { return filePath; } int filePosi = filePath.lastIndexOf(File.separator); return (filePosi == -1) ? "" : filePath.substring(0, filePosi);}/** * get suffix of file from path * <p/> * getFileExtension(null) = "" * getFileExtension("") = "" * getFileExtension(" ") = " " * getFileExtension("a.mp3") = "mp3" * getFileExtension("a.b.rmvb") = "rmvb" * getFileExtension("abc") = "" * getFileExtension("c:\\") = "" * getFileExtension("c:\\a") = "" * getFileExtension("c:\\a.b") = "b" * getFileExtension("c:a.txt\\a") = "" * getFileExtension("/home/admin") = "" * getFileExtension("/home/admin/a.txt/b") = "" * getFileExtension("/home/admin/a.txt/b.mp3") = "mp3" * * @param filePath * @return */public static String getFileExtension(String filePath) { if (filePath == null || filePath.trim().length() == 0) { return filePath; } int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR); int filePosi = filePath.lastIndexOf(File.separator); if (extenPosi == -1) { return ""; } return (filePosi >= extenPosi) ? "" : filePath.substring(extenPosi + 1);}/** * Creates the directory named by the trailing filename of this file, including the complete directory path required * to create this directory. * Attentions: * makeDirs("C:\\Users\\Trinea") can only create users folder * makeFolder("C:\\Users\\Trinea\\") can create Trinea folder * * @param filePath * @return true if the necessary directories have been created or the target directory already exists, false one of * the directories can not be created. * if {@link FileUtils#getFolderName(String)} return null, return false * if target directory already exists, return true * return {@link File#makeFolder} */public static boolean makeDirs(String filePath) { String folderName = getFolderName(filePath); if (filePath == null || filePath.length() == 0) { return false; } File folder = new File(folderName); return (folder.exists() && folder.isDirectory()) ? true : folder.mkdirs();}/** * @param filePath * @return * @see #makeDirs(String) */public static boolean makeFolders(String filePath) { return makeDirs(filePath);}/** * Indicates if this file represents a file on the underlying file system. * * @param filePath * @return */public static boolean isFileExist(String filePath) { if (filePath == null || filePath.trim().length() == 0) { return false; } File file = new File(filePath); return (file.exists() && file.isFile());}/** * Indicates if this file represents a directory on the underlying file system. * * @param directoryPath * @return */public static boolean isFolderExist(String directoryPath) { if (directoryPath == null || directoryPath.trim().length() == 0) { return false; } File dire = new File(directoryPath); return (dire.exists() && dire.isDirectory());}/** * delete file or directory * * if path is null or empty, return tru * if path not exist, return true * if path exist, delete recursion. return true * * @param path * @return */public static boolean deleteFile(String path) { if (path == null || path.trim().length() == 0) { return true; } File file = new File(path); if (!file.exists()) { return true; } if (file.isFile()) { return file.delete(); } if (!file.isDirectory()) { return false; } for (File f : file.listFiles()) { if (f.isFile()) { f.delete(); } else if (f.isDirectory()) { deleteFile(f.getAbsolutePath()); } } return file.delete();}/** * get file size * if path is null or empty, return -1 * <if path exist and it is a file, return file size, else return -1 * * @param path * @return returns the length of this file in bytes. returns -1 if the file does not exist. */public static long getFileSize(String path) { if (path == null || path.trim().length() == 0) { return -1; } File file = new File(path); return (file.exists() && file.isFile() ? file.length() : -1);}5、字符串转换
/** * 指令字符里很多字符是终结符: \r ,在输出日志的无法打印,为了日志能看到,处理掉这个字符 * * @param bytes 字节 * @return 字符串 */public static String transferForPrint(byte... bytes) { if (bytes == null) return null; return transferForPrint(new String(bytes));}/** * @param str 字符串 * @return 字符串 */public static String transferForPrint(String str) { if (TextUtils.isEmpty(str)) return str; str = str.replace('\r', ' '); str = str.replace('\n', ' '); if (str.endsWith(">")) { str = str.substring(0, str.length() - 1); } return str;}/** * 转换成 16进制字符串 * * @param b 字节 * @return 字符串 */private static String toHexStr(byte b) { String str = Integer.toHexString(0xFF & b); if (str.length() == 1) str = "0" + str; return str.toUpperCase();}/** * 转换成 16进制字符串 * * @param bytes 字节 * @return 字符串 */public static String toHexString(byte... bytes) { if (bytes == null) return null; StringBuilder sb = new StringBuilder(); if (bytes.length < 20) { sb.append("["); for (int i = 0; i < bytes.length; i++) { sb.append(toHexStr(bytes[i])).append(","); } sb.append("]"); } else { sb.append("["); for (int i = 0; i < 4; i++) { sb.append(toHexStr(bytes[i])).append(","); } sb.append("..."); for (int i = bytes.length - 5; i < bytes.length; i++) { sb.append(toHexStr(bytes[i])).append(","); } sb.setLength(sb.length() - 1); sb.append("]"); } return sb.toString();}6、字体操作
//将钥匙使用的字体的类型public static Typeface TEXT_TYPE ;private static Context mContext;// 定义一个私有的构造方法private FrontUtils() {}// 将自身的实例对象设置为一个属性,并加上Static和final修饰符private static final FrontUtils fontUtils = new FrontUtils();// 静态方法返回该类的实例public static FrontUtils getInstance(Context mContext) { return fontUtils;}public FrontUtils(Context mContext) { this.mContext = mContext;}/** * 获取应用中将要用到的字体 * 从assets中获取字体资源 * @return */public static Typeface getFont(){ try{ TEXT_TYPE = Typeface.createFromAsset(mContext.getAssets(),"fronts/NotoSansHans-Black.otf"); }catch(Exception e){ TEXT_TYPE = Typeface.DEFAULT; } return TEXT_TYPE;}这些都是在开发中基本会用的到工具类 ,在这里给自己做个笔记,如果和哪位大哥的相同,还望包涵,也在此谢谢您
阅读全文
2 0
- 开发中经常用到的工具类
- Android开发中经常用到的工具
- 开发Android项目经常用到的四个工具类
- java 项目中经常用到的工具类
- 一些科研中经常用到的工具
- 开发中经常用到的一些函数
- 开发中经常用到的sql语句:
- 开发中经常用到的快捷方式
- iOS开发中经常用到的细节
- 开发中经常用到的JSON解析
- php开发中经常用到的实例
- 开发j2ee时经常用到的工具和一些框架
- 软件工程中经常要用到的设计工具
- 开发经常用到的API
- 在b/s开发中经常用到的javaScript技术
- 在b/s开发中经常用到的javaScript技术
- 在b/s开发中经常用到的javaScript技术
- 在b/s开发中经常用到的javaScript技术
- 文章标题
- 【异步请求相关知识点】XMLHTTP.readyState的五种状态
- 原子变量 和cas 原理
- 数据表自增ID,在删除全部行后插入新行ID如何再从1开始
- Kotlin官方参考整理——02.基础
- 开发中经常用到的工具类
- Eclipse neon安装 svn
- 开发常见linux命令
- git使用_命令备注
- Linux编程之自定义消息队列
- 4.1 SciPy库介绍及导入
- 【异步请求相关知识点】xmlHttp.status的值(HTTP状态表)
- 4.2 线性代数linalg模块
- 4.3 拟合与求解optimize模块