我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android APP使用自定义字体实现方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android APP使用自定义字体实现方法

android系统内置字体

android 系统本身内置了一些字体,可以在程序中使用,并且支持在xml配置textView的时候进行修改字体的样式。支持字段为android:textStyle ,android:typeface, android:fontFamily,系统内置了normal|bold|italic三种style, 内置了normal,sans,serif,monospace,几种字体(实测这几种字体仅英文有效),typace和fontFamily功能一样。

使用自定义的字体

以上的方式可以改变字体的样式,还不是真正的自定义。android系统支持TypeFace,即ttf的字体文件。我们可以在程序中放入ttf字体文件,在程序中使用Typeface设置字体。

第一步,在assets目录下新建fonts目录,把ttf字体文件放到这。

第二步,程序中调用:


public class MainActivity extends AppCompatActivity {
   private TextView textView;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     textView= (TextView) findViewById(R.id.text);
     AssetManager assets = getAssets();
     Typeface fromAsset = Typeface.createFromAsset(assets, "fonts/fzlt.ttf");
     textView.setTypeface(fromAsset);
  }
}

注意ttf文件命名不能使用中文,否则可能无法加载。

对于需要使用比较多的地方,可以写一个TextView的子类来统一处理。


public class CustomTextView extends TextView {
   public CustomTextView(Context context) {
     super(context);
     // TODO Auto-generated constructor stub
   }
   public CustomTextView(Context context, AttributeSet attrs) {
     super(context,attrs);
     // TODO Auto-generated constructor stub
   }
   public CustomTextView(Context context, AttributeSet attrs,int defStyle) {
     super(context,attrs,defStyle);
     // TODO Auto-generated constructor stub
   }
   public void setTypeface(Typeface tf, int style) {
     super.setTypeface(AppContext.getInstance().getTypeface());
   }
}

//初始化自定义字体
typeface = Typeface.createFromAsset(getAssets(), "fonts/fzlt.ttf");

法还是有点缺点的:只能替换一类控件的字体,如果需要替换Button或EditText控件的字体,需要以相同的方式自定义这些控件,这样工作量大,如何高效替换整个app中的字体,见下方参考资料。

在webview中使用自定义的字体

对于本地的网页,在asset目录放字体文件,并在css中添加以下内容,自定义一个字体face,并且在需要的地方使用这个字体face即可。


<style>
@font-face {
   font-family: 'myface';
   class="lazy" data-src: url('file:///android_asset/fonts/fzlt.ttf');
}
body {
   margin: 0;
   padding: 0;
   font-family:'myface','方正兰亭纤黑简体';
}
.textbar{ box-sizing:border-box; width:100%; padding:5px;}
.textbar p{ font-size:16px; text-align:justify; color:#333;line-height:24px; margin:0 0 0 0;}
.textbar h1{ font-size:18px; margin:10px 0 10px 0;color:#000}
</style>

对于在线的网页,则需要把字体文件放到服务器,使用同样的方式定义字体face,应用到每个地方。
为了减少网页或者说服务器端的工作,可以使用本地注入的方式注入font-face的css,并对整个网页进行样式替换。给webview自定义webViewClient,重写onPageFinish,在其中添加如下内容:


view.loadUrl("javascript:!function(){" + "s=document.createElement('style');s.innerHTML=" + "\"@font-face{font-family:myhyqh;class="lazy" data-src:url('**injection**/hyqh.ttf');}*{font-family:myhyqh !important;}\";"
+ "document.getElementsByTagName('head')[0].appendChild(s);" +
"document.getElementsByTagName('body')[0].style.fontFamily = \"myhyqh\";}()");
//由于网页上是没有权限访问本地的asset文件夹的,因此我们需要拦截请求来加载本地的文件,我这里替换了`file:
//android_assets/`为 `**injection**/`了,我们还需要重写`shouldInterceptRequest`
//在请求为我们这个字体文件的时候,加载本地文件:
@Override
public WebResourceResponse shouldInterceptRequest (WebView view, String url){
   WebResourceResponse response = super.shouldInterceptRequest(view, url);
   Log.i("load intercept request:" + url);
   if (url != null && url.contains("**injection**/")) {
     //String assertPath = url.replace("**injection**/", "");
     String assertPath = url.substring(url.indexOf("**injection**/") + "**injection**/".length(), url.length());
     try {
        response = new WebResourceResponse("application/x-font-ttf", "UTF8", getAssets().open(assertPath));
     } catch (IOException e) {
        e.printStackTrace();
     }
   }
   return response;
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:Android使用自定义字体的方法解析Android中使用自定义字体的实现方法Android Back键点击两次退出应用详解及实现方法总结Android 中SP与DP的区别实例详解Android实现360手机助手底部的动画菜单手把手教你用Android自定义饼状图Android获取手机通话记录的方法Android自定义控件实现随手指移动的小球Android Gradle Build Error:Some file crunching failed, see logs for details的快速解决方法Android仿新浪微博、QQ空间等帖子显示(2)Android仿新浪微博、QQ空间等帖子显示(1)


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android APP使用自定义字体实现方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android APP使用自定义字体实现方法

android系统内置字体 android 系统本身内置了一些字体,可以在程序中使用,并且支持在xml配置textView的时候进行修改字体的样式。支持字段为android:textStyle ,android:typeface, andr
2022-06-06

Android使用自定义字体的方法

本文实例讲述了Android使用自定义字体的方法。分享给大家供大家参考,具体如下: 一、问题: 作为android初学者,在做一个游戏,游戏的标题我用的是TextView,android只提供斜体粗体,但把字体设置成楷体游戏的界面会更好,怎
2022-06-06

解析Android中使用自定义字体的实现方法

1、Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace 2、在Android中可以引入其他字体 。 代码如下:
2022-06-06

Android自定义View实现闪耀字体效果

本文实例为大家分享了闪耀字体效果的具体代码,供大家参考,具体内容如下import android.content.Context; import android.graphics.Canvas; import android.graphic
2022-06-06

Android自定义Style实现方法

styles.xml如下: [html] 代码如下: