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即可。

@font-face {

font-family: 'myface';

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}

对于在线的网页,则需要把字体文件放到服务器,使用同样的方式定义字体face,应用到每个地方。

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

view.loadUrl("javascript:!function(){" + "s=document.createElement('style');s.innerHTML=" + "\"@font-face{font-family:myhyqh;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;

}

参考资料:

安卓开发使用ttf文字_Android应用使用自定义字体相关推荐

  1. 安卓开发使用ttf文字_Android中正确使用字体图标(iconfont)的方法

    字体图标 字体图标是指将图标做成字体文件(.ttf),从而代替传统的png等图标资源. 使用字体图标的优点和缺点分别为: 优点: 1. 可以高度自定义图标的样式(包括大小和颜色),对于个人开发者尤其适 ...

  2. 安卓开发使用ttf文字_打破限制,自定义MIUI12相册文字水印字体

    熟悉MIUI12的都知道,相册自带图片编辑功能,有拼图.添加贴纸.涂鸦.添加文字水印等功能.就拿文字水印功能来说,仅只有系统字体.方正喵呜.方正兰亭三种字体可选,可我又不喜欢这两种字体怎么办? 本期就 ...

  3. 安卓开发fragment报错_Android应用开发之嵌套Fragments (Nested Fragments) 的使用及常见错误讲解...

    本文将带你了解Android应用开发Android Fragment的使用学习之嵌套Fragments (Nested Fragments) 的使用及常见错误讲解,希望本文对大家学Android有所帮 ...

  4. 安卓开发fragment报错_android开发 Fragment嵌套调用常见错误

    在activity中有时需要嵌套调用fragment,但嵌套调用往往带来视图的显示与预期的不一样或是fragment的切换有问题.在使用时要注意几点: 1.fragment中嵌套fragment,子f ...

  5. android xml黑体字_Android中快速实现自定义字体!

    前言:我们都知道,Android中默认的字体是黑体,而大多数app也都是使用的这种字体,但我们发现,大多数app中,个别地方字体非常好看,例如app的标题栏,菜单栏等地方,那他们是怎么做到的呢?有两种 ...

  6. android 微博字体高亮,安卓开发札记——高仿新浪微博文字处理(实现关键字高亮,自定义表情替换并加入点击事件实现)...

    安卓开发笔记--高仿新浪微博文字处理(实现关键字高亮,自定义表情替换并加入点击事件实现) 先让大家看下效果图,这个是我自己在闲暇时间仿写的新浪微博客户端: 今天来讲讲如何实现上图的效果,这里需要用到S ...

  7. 从0开始安卓开发之路_Android Studio安装包

    Android Studio原本是基于JAVA IDEA下的一个安卓开发插件,后被谷歌从插件中移了出来,成为独立安卓开发IDE,但语言是基于JAVA! 但是如果想要下载此IDE就要到谷歌官方的应用商店 ...

  8. java安卓开发工具_Android开发必备那些工具

    工欲善其事,必先利其器,在Android项目的开发中,借助工具能使开发效率大幅提升,下面分享我经常使用的工具,欢迎各位同学补充. 1.Android Studio Android程序员的吃饭工具,可以 ...

  9. 安卓开发学习日记第一天(笑)_Android Studio3.6安装_莫韵乐的快乐笔记

    安卓开发学习第一天 Android Studio3.6安装 没想到终于要写出自己的第一个博客了 反正是第一篇,有没有人看都无所谓(理智:129/129) 万事开头难,做下去就容易很多了 言归正传 工欲 ...

  10. 安卓开发屏幕分辨率尺寸适配问题【原创】

    2019独角兽企业重金招聘Python工程师标准>>> 屏幕分辨率尺寸适配是安卓开发中的难题之一,我开发中的解决办法是: 1.多使用相对布局,即RelativeLayout,或者Li ...

最新文章

  1. SQL Server-聚焦使用视图若干限制/建议、视图查询性能问题,你懵逼了?(二十五)...
  2. 第二轮冲刺-Runner站立会议03
  3. 好用的vp n推荐2020_哪个牌子的沐浴露好,2020年最新沐浴露选购测评,好用好闻易清洗沐浴露品牌推荐...
  4. git提取和拉取区别_每天一Git之起步 - 关于版本控制
  5. 机房(厂房)温度环境监控系统
  6. AsyncTask的基本使用
  7. Sosoapi环境搭建
  8. postgreSQL中文拼音排序
  9. 课程设计---宾馆客房管理系统
  10. c语言计算音频分贝函数,如果用c语言程序读取一段音频文件要如何做,具体要调用哪些函数,在网上搜索了半天,乱七八糟的,找不到什么有用的信息...
  11. c语言char sex是什么意思,2012年计算机二级C语言入门教程:结构体
  12. 装双系统win10和android,教你安装Win10和安卓Android双系统(不是模拟器)
  13. 2021 USGS Landsat 8 批量下载教程
  14. 使用 HTML/CSS 实现 Educoder 顶部导航栏
  15. PCM设备的E1接头
  16. 神舟战神G8-CA7NP怎么样?测评值得买吗?
  17. ffmpeg下载m3u8工具大全
  18. 这些食物让人越吃越聪明!
  19. mplayer参数说明
  20. 【转】Mac突然连不上WiFi解决步骤

热门文章

  1. petalinux 2020.2 安装教程,基于ubuntu20.04.LTS版本
  2. 小游戏开发 手机QQ 微信 浏览器 扫码 Debug 调试输出 查看日志
  3. 完美掌握MySQL登录方法]MySQL登录教程
  4. 2019年度优秀安全内容合集
  5. 计算机专业本科生必学课程
  6. SysTrace常识
  7. SVN 版本回退 命令行
  8. 怎么制作自己的压缩软件
  9. 【技术教程】如何调用宇视SDK实现摄像机的云台控制?
  10. 在禁用uac_如何(真正)在Windows 7上完全禁用UAC