/* * Created by LuaView. * Copyright (c) 2017, Alibaba Group. All rights reserved. * * This source code is licensed under the MIT. * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree. */ package com.taobao.luaview.util; import android.content.Context; import android.graphics.Typeface; import com.taobao.luaview.cache.SimpleCache; /** * 字体处理,字体使用SimpleCache,全局缓存 * * @author song * @date 15/11/6 */ public class TypefaceUtil { private static final String TAG = "TypefaceUtil"; private static final String TAG_TYPEFACE_NAME = "TypefaceUtil_NAME"; /** * 未知 * * @param typeface * @return */ public static String getTypefaceName(Typeface typeface) { final String name = SimpleCache.getCache(TAG_TYPEFACE_NAME).get(typeface); return name != null ? name : "unknown"; } /** * create typeface * * @param context * @param name * @return */ public static Typeface create(final Context context, final String name) { Typeface result = SimpleCache.getCache(TAG).get(name); if (result == null) { final String fontNameOrAssetPathOrFilePath = ParamUtil.getFileNameWithPostfix(name, "ttf"); result = createFromAsset(context, fontNameOrAssetPathOrFilePath); if (result == null) { result = createFromFile(fontNameOrAssetPathOrFilePath); } if (result == null) { result = createByName(fontNameOrAssetPathOrFilePath); } } SimpleCache.getCache(TAG_TYPEFACE_NAME).put(result, name);//cache name return SimpleCache.getCache(TAG).put(name, result); } /** * create a typeface * * @param name * @return */ public static Typeface create(final String name) { Typeface result = SimpleCache.getCache(TAG).get(name); if (result == null) { final String fontNameOrFilePath = ParamUtil.getFileNameWithPostfix(name, "ttf"); result = createFromFile(fontNameOrFilePath); if (result == null) { result = createByName(fontNameOrFilePath); } } SimpleCache.getCache(TAG_TYPEFACE_NAME).put(result, name);//cache name return SimpleCache.getCache(TAG).put(name, result); } /** * create typeface by name or path * * @param fontName * @return */ private static Typeface createByName(final String fontName) { try { final Typeface typeface = Typeface.create(fontName, Typeface.BOLD_ITALIC); if (typeface != null && Typeface.BOLD_ITALIC == typeface.getStyle()) {//得到的是默认字体则返回null return null; } return typeface; } catch (Exception e) { LogUtil.e("create typeface " + fontName + " by name failed", e); return null; } } /** * create typeface from asset * * @param context * @param assetPath * @return */ private static Typeface createFromAsset(final Context context, final String assetPath) { try { return Typeface.createFromAsset(context.getAssets(), assetPath); } catch (Exception e) { LogUtil.e("create typeface " + assetPath + " from asset failed", e); return null; } } /** * create typeface from file path * * @param filePath * @return */ private static Typeface createFromFile(final String filePath) { try { return Typeface.createFromFile(filePath); } catch (Exception e) { LogUtil.e("create typeface " + filePath + " from file failed", e); return null; } } }