FontManager 给某个页面或某些控件更改字体
来源:互联网 发布:知乎日报 正装 编辑:程序博客网 时间:2024/06/05 17:33
更改字体的方法:
public class FontsManager { public static final String TAG = "FontsManagerException"; public static final String INIT_EXCEPTION = "FontsManager使用该函数前必须先进行初始化"; /** 默认字体 */ public static Typeface defaultTypeface = null; private FontsManager(){} //----初始化------------------------------------------------------------------------- /** * 初始化 * * @Title: init * @param typeface 字体 */ public static void init(Typeface typeface){ if (typeface == null) { Log.e(TAG, "typeface不能为空。"); throw new IllegalStateException("typeface不能为空。"); } else { defaultTypeface = typeface; } } /** * 初始化 * * @Title: initFormAssets * @param context 上下文 * @param fontPath Assets中字体包路径 */ public static void initFormAssets(Context context, String fontPath){ try { defaultTypeface = Typeface.createFromAsset(context.getAssets(), fontPath); } catch (Exception e) { Log.e(TAG, "初始化失败,请检查fontsPath是否错误"); throw new IllegalStateException("初始化失败,请检查fontsPath是否错误"); } } /** * 初始化 * * @Title: initFormFile * @param fontPath 字体包存放路径(例如:sdcard/font.ttf) */ public static void initFormFile(String fontPath){ try { defaultTypeface = Typeface.createFromFile(fontPath); } catch (Exception e) { Log.e(TAG, "初始化失败,请检查fontsPath是否错误"); throw new IllegalStateException("初始化失败,请检查fontsPath是否错误"); } } /** * 初始化 * * @Title: initFormFile * @param fontPath 字体包文件 */ public static void initFormFile(File fontFile){ try { defaultTypeface = Typeface.createFromFile(fontFile); } catch (Exception e) { Log.e(TAG, "初始化失败,请检查fontFile是否是字体文件"); throw new IllegalStateException("初始化失败,请检查fontFile是否是字体文件"); } } //----改变字体------------------------------------------------------------------------- /** * 更换字体 * * @Title: changeFonts * @param activity */ public static void changeFonts(Activity activity){ if (defaultTypeface == null) { Log.e(TAG, INIT_EXCEPTION); throw new IllegalStateException(INIT_EXCEPTION); } //此行代码注释后不看到有什么变化// ActionBarHelper.changeTitleFonts(activity, defaultTypeface); changeFonts((ViewGroup) activity.findViewById(android.R.id.content), defaultTypeface); } /** * 更改字体 * * @Title: changeFonts * @param view */ public static void changeFonts(View view){ if (defaultTypeface == null) { Log.e(TAG, INIT_EXCEPTION); throw new IllegalStateException(INIT_EXCEPTION); } changeFonts(view, defaultTypeface); } /** * 更改字体 * * @Title: changeFonts * @param viewGroup */ public static void changeFonts(ViewGroup viewGroup){ if (defaultTypeface == null) { Log.e(TAG, INIT_EXCEPTION); throw new IllegalStateException(INIT_EXCEPTION); } changeFonts(viewGroup, defaultTypeface); } /** * 更换字体 * * @Title: changeFonts * @param viewGroup * @param typeface */ public static void changeFonts(ViewGroup viewGroup, Typeface typeface){ try { for (int i = 0; i < viewGroup.getChildCount(); i++) { View v = viewGroup.getChildAt(i); if (v instanceof ViewGroup) { changeFonts((ViewGroup) v, typeface); } else if (v instanceof View) { changeFonts((View) v, typeface); } } } catch (Exception e) { Log.e(TAG, e.toString()); // TODO } } /** * 更换字体 * * @Title: changeFonts * @param view * @param typeface void */ public static void changeFonts(View view, Typeface typeface){ try { if (view instanceof ViewGroup) { changeFonts((ViewGroup) view, typeface); } else if (view instanceof TextView) { ((TextView) view).setTypeface(typeface); } else if (view instanceof Button) { ((Button) view).setTypeface(typeface); } else if (view instanceof Switch) { ((Switch) view).setTypeface(typeface); } else if (view instanceof EditText) { ((EditText) view).setTypeface(typeface); } } catch (Exception e) { Log.e(TAG, e.toString()); // TODO } }}
View页,点击按钮更改字体,字体放在与java目录平级的assets目录下:
public class FontManageDemoActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_font_manage_demo); FontsManager.initFormAssets(FontManageDemoActivity.this,"fonts/sao.ttf"); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FontsManager.changeFonts(FontManageDemoActivity.this); Toast.makeText(FontManageDemoActivity.this,"替换成功",Toast.LENGTH_SHORT).show(); } }); }}
在网上查询到的资料中还有一个文件,但我使用后,没看到效果,该文件的调用在FontManager.java中的changeFonts(Activity activity)中:
@SuppressLint("DefaultLocale")@SuppressWarnings("deprecation")public class ActionBarHelper { private static final String TAG = "ActionBarHelper"; public static final String INIT_EXCEPTION = "使用该函数前必须对FontsManager进行初始化"; /** * 改变标题字体 * * @Title: changeTitleFonts * @param activity * @param typeface */ @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void changeTitleFonts(Activity activity, Typeface typeface){ if (typeface == null || activity == null) { Log.e(TAG, "activity或 typeface等于空!"); return; } if (activity instanceof ActionBarActivity) { try { android.support.v7.app.ActionBar actionBar = ((ActionBarActivity) activity).getSupportActionBar(); setTitle(actionBar, typeface, actionBar.getTitle().toString()); } catch (Exception e) { Log.e(TAG, e.toString()); } } else if (activity instanceof Activity) { try { ActionBar actionBar = activity.getActionBar(); setTitle(actionBar, typeface, actionBar.getTitle().toString()); } catch (Exception e) { Log.e(TAG, e.toString()); } } } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void setTitle(Activity activity, Typeface typeface, String title){ if (activity instanceof android.support.v7.app.ActionBarActivity) { try { android.support.v7.app.ActionBar actionBar = ((ActionBarActivity) activity).getSupportActionBar(); setTitle(actionBar, typeface, title); } catch (Exception e) { Log.e(TAG, e.toString()); } } else if (activity instanceof Activity) { try { ActionBar actionBar = activity.getActionBar(); setTitle(actionBar, typeface, title); } catch (Exception e) { Log.e(TAG, e.toString()); } } } public static void setTitle(android.support.v7.app.ActionBar actionBar, Typeface typeface, String title){ if (typeface == null || actionBar == null) { Log.e(TAG, "typeface或actionbar为空"); return; } SpannableString sp = new SpannableString(title); sp.setSpan(new TypefaceSpan(typeface), 0, sp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); setTitle(actionBar, sp); } public static void setTitle(ActionBar actionBar, Typeface typeface, String title){ if (typeface == null || actionBar == null) { Log.e(TAG, "typeface或actionbar为空"); return; } SpannableString sp = new SpannableString(title); sp.setSpan(new TypefaceSpan(typeface), 0, sp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); setTitle(actionBar, sp); } /** * 设置标题 * * @Title: setTitle * @param actionBar * @param spannableString */ public static void setTitle(android.support.v7.app.ActionBar actionBar, SpannableString spannableString){ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN && Build.MANUFACTURER.toUpperCase().equals("LGE")) { actionBar.setTitle(spannableString.toString()); } else { actionBar.setTitle(spannableString); } } /** * 设置标题 * * @Title: setTitle * @param actionBar * @param spannableString */ @TargetApi(11) public static void setTitle(ActionBar actionBar, SpannableString spannableString){ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN && Build.MANUFACTURER.toUpperCase().equals("LGE")) { actionBar.setTitle(spannableString.toString()); } else { actionBar.setTitle(spannableString); } } /** * 设置字体样式 * * @ClassName: TypefaceSpan * @author: sloop * @website: http://www.sloop.icoc.cc * @weibo: http://weibo.com/u/5459430586 * @date 2015年6月9日 下午12:11:13 */ private static class TypefaceSpan extends MetricAffectingSpan { Typeface typeface; TypefaceSpan(Typeface typeface){ this.typeface = typeface; } @Override public void updateMeasureState(TextPaint p){ p.setTypeface(typeface); p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG); } @Override public void updateDrawState(TextPaint tp){ tp.setTypeface(typeface); tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG); } }}
0 0
- FontManager 给某个页面或某些控件更改字体
- jsp页面更改某些链接
- 更改某个页面的公共页面
- QTextEdit更改特定某些行的字体格式
- linux 下给某个用户更改权限
- 给页面添加特殊字体
- Ubuntu14.04安装搜狗输入法和fontmanager修改字体
- 禁止访问某个或某些文件(服务器上配置)
- TOP中只查看某个或某些进程的信息
- TOP中只查看某个或某些进程的信息
- WinEdt 6.0更改字体或字号技巧
- eclipse neon Java编辑器页面字体更改
- 如何动态更改VC控件字体颜色
- 如何动态更改VC控件字体颜色
- 更改控件上的字体颜色
- 在RichTextBox 控件中更改字体样式
- MFC更改控件字体颜色背景等
- EnableWindow(): 使某个控件或窗口可用
- 粒子滤波学习笔记(三)
- Scrapyd的安装及使用(windows)
- 209 php扩展填坑1
- win10 uwp 绘图 Line 控件使用
- UML学习笔记
- FontManager 给某个页面或某些控件更改字体
- NSTimer使用机及其注意事项(一)
- Java通过百度地图API获取地址经纬度
- 【iOS开发】推送跳转处理&&UIApplicationLaunchOptionsRemoteNotificationKey
- Spark Streaming Kafka CreateDirectDStreaming 遇见的问题
- UVA 10000 Longest Paths(SPFA)
- Android自定义控件之柱型图表控件
- win10 uwp 存放网络图片到本地
- ubuntu14.04 编译源码安装PCL1.8