在网上搜索了相关资料,研究了两种算是比较快速的改变程序字体的方法,好,先来介绍着两种方法。

首先第一种方法是重写控件(以Textview为例):

 1、Android在写程序的时候谷歌早已将所有字体都默认好了具体是什么字体,自己也没去研究,所以假如说要让程序的字体变成自己想要的字体也是件不容易的事情,首先你要先下载字体库(后缀为ttf),英文的字体库还不算大,而一般来说中文的字体库就很大,所以可以更加程序里面出现的文字,对字体库进行裁剪。要下载字体库的可以上网下载,网上一堆的是,csdn里面的比较抠门,字体库居然还要积分,都不想吐槽了。

2、下载完字体库后,你工程目录assets文件夹中,新建一个文件夹“fonts”用于放字体库,然后再加字体库(.ttf)放到fonts文件夹下,当然你的字体库文件不能以中文命名。

3、重写Textview,创建一个类继承TextView,代码如下:

public class ChineseTextView extends TextView {

	public ChineseTextView(Context context, AttributeSet attrs) {
super(context, attrs);
/*
* 必须事先在assets底下创建一fonts文件夹 并放入要使用的字体文件(.ttf)
* 并提供相对路径给creatFromAsset()来创建Typeface对象
*/
Typeface fontFace = Typeface.createFromAsset(context.getAssets(),
"fonts/Microsoft.ttf");
// 字体文件必须是true type font的格式(ttf);
// 当使用外部字体却又发现字体没有变化的时候(以 Droid Sans代替),通常是因为
// 这个字体android没有支持,而非你的程序发生了错误
setTypeface(fontFace);
}
}

  4、在xml布局文件直接用这个类代替Textview便可以:

            <com.example.androidsetting.ChineseTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />

再来说说第二种方法,这种方法不需要继承Textview,不过还是需要字体库。

 前两个步骤更上面的一样,这里复制一下。

 1、Android在写程序的时候谷歌早已将所有字体都默认好了具体是什么字体,自己也没去研究,所以假如说要让程序的字体变成自己想要的字体也是件不容易的事情,首先你要先下载字体库(后缀为ttf),英文的字体库还不算大,而一般来说中文的字体库就很大,所以可以更加程序里面出现的文字,对字体库进行裁剪。要下载字体库的可以上网下载,网上一堆的是,csdn里面的比较抠门,字体库居然还要积分,都不想吐槽了。

2、下载完字体库后,你工程目录assets文件夹中,新建一个文件夹“fonts”用于放字体库,然后再加字体库(.ttf)放到fonts文件夹下,当然你的字体库文件不能以中文命名。、

3、先创建一个方法,changeFont(ViewGroup root){},用来遍历当前页面的控件,目的就是为了给同一类控件进行样式设置,所以用这种方法也能比较快的进行字体设置

	protected void changeFont(ViewGroup root) {
Typeface tf = Typeface.createFromAsset(this.getAssets(),
"fonts/Microsoft.ttf");
for(int i = 0; i <root.getChildCount(); i++) {
View v = root.getChildAt(i);
if(v instanceof Button) {
((Button)v).setTypeface(tf);
((Button)v).setTextSize(15);
((Button)v).setTextColor(Color.GRAY);
} else if(v instanceof TextView ) {
((TextView)v).setTypeface(tf);
((TextView)v).setTextSize(15);
((TextView)v).setTextColor(Color.GRAY);
} else if(v instanceof EditText) {
((EditText)v).setTypeface(tf);
((EditText)v).setTextSize(15);
((EditText)v).setTextColor(Color.GRAY);
} else if(v instanceof ViewGroup) {
changeFont((ViewGroup)v);
}
}
}

4、在onCreate方法中,当然在setContentView(R.layout.activity_main);后面去实现

    ViewGroup root=(ViewGroup) this.getWindow().getDecorView();  //获取本Activity下的获取最外层控件
changeFont(root);

  上面两种方法都介绍了,下面总结一下这两种方法的感受,我觉得都各有优缺点。

第一种方法,不需要在activity中增加代码,直接修改控件的就行了,但是呢,因为一页面有需要控件都是有文字的,如button,checkbox,一堆,所以要是全都改的话不是要全部重新这些控件。第二种方法的话在activity里面增加代码,那么就差不多都要在所有activity里面增加代码,然后没了。对了第一种方法,其实是在xml里面去实现,就是说你的控件每出现一次就要TextView一次,用ScrollView来说明问题,ScrollView里面有很多个Textview,都是通过第一种方法去修改字体,第一次加载界面,会加载一段时间(看你加载的多少)才将页面显示出来,然后ScrollView往下拖动,之前看不到的textview要加载一遍,然后这期间有会有稍微的卡顿,这就是第一种方法最致命的一个缺点。相比之下,第二种方法不会这样,因为它是先加载界面在修改。但是同样,这两种方法,第一次进入界面的时候都会先加载一段时间才能进去,体验不是很好。

Android 修改应用程序字体的更多相关文章

  1. Qt for Android修改应用程序的图标和名称

    使用QT开发出的Android Apk安装后默认的图标是安卓的小机器人,下面介绍在QT5.12版本上修改APP名称和图标的方法. 1.  编译一次项目后,在编译目录下找到AndroidManifest ...

  2. Android之hint提示字体大小修改,显示完全

    Android之hint提示字体大小修改,显示完全 1.工作中遇到一个问题,就是自定义EditText的hint提示在超大字体下会显示不全, 2.然后在网上搜索了一下,在这里记录一下,分享给大家,在此 ...

  3. Android 修改字体,跳不过的 Typeface

    序 在 Android 下使用自定义字体已经是一个比较常见的需求了,最近也做了个比较深入的研究. 那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以我 ...

  4. Android Studio 3.1.2 修改字体(font)大小(size) 及老版本修改主题、字体、颜色 参照地址

    Android Studio 3.1.2  修改字体(font)大小(size) 步骤:File-Settings-Editor-Color Scheme-Color Scheme Font-Size ...

  5. Android Studio 修改主题和字体

    打开设置 或   修改主题 修改字体 参考资料 Android Studio主题以及字体修改

  6. android:修改PagerTabStrip中的背景颜色,标题字体的样式、颜色和图标以及指示条的颜色

    1.修改PagerTabStrip中的背景颜色 我们在布局中直接设置background属性即可: <android.support.v4.view.ViewPager android:id=& ...

  7. Android 修改Menu字体颜色和背景

    我们知道,在Android中修改TextView的字体颜色,一般是通过setTextColor()方法.虽说Android的Menu菜单项的每一项都是由TextView组成,但是Android的sdk ...

  8. android 修改系统的dialog样式

    android 修改系统的dialog样式 一.觉得自定义配置文件麻烦?那就来修改系统自定义XML文件来实现修改系统dialog的样式吧. 如果是在XML中样式:首先来说下样式.  在 Style.x ...

  9. 解决IE apk变成zip:Android 手机应用程序文件下载服务器Nginx+Tomcat配置解决方法

    APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...

随机推荐

  1. AspNetCore3.1_Secutiry源码解析_6_Authentication_OpenIdConnect

    title: "AspNetCore3.1_Secutiry源码解析_6_Authentication_OpenIdConnect" date: 2020-03-25T21:33: ...

  2. golang工具之present - 编写go特色的ppt

    简介: Golang Present 是 Golang 社群开发出來的一个简单工具,通过简单的语法可以制作 ppt(语法近似于 Markdown).   默认文件格式是 .slide ,是随着 gol ...

  3. 最便捷的神经网络可视化工具之一--Flashtorch

    前言 几周前,我在AnitaB.org组织的Hopperx1 London上发表了演讲作为伦敦科技周的一部分. 在演讲结束后,我收到了热烈的反馈,所以我决定写一个稍微长一点的演讲版本来介绍FlashT ...

  4. Tensorflow实现MNIST手写数字识别

    之前我们讲了神经网络的起源.单层神经网络.多层神经网络的搭建过程.搭建时要注意到的具体问题.以及解决这些问题的具体方法.本文将通过一个经典的案例:MNIST手写数字识别,以代码的形式来为大家梳理一遍神 ...

  5. 干货|Python基础入门 课程笔记(三)

    目录 列表 元组 字典 三元表达式 一.列表 前面学习的字符串可以用来存储一串信息,那么想一想,如果现在有很多人,总不能每个人都起一个变量名把?那岂不得疯~ 咱们可以使用列表. (1)列表得格式和输出 ...

  6. “GANs”与“ODEs”:数学建模的终结?

    在本文中,我想将经典数学建模和机器学习之间建立联系,它们以完全不同的方式模拟身边的对象和过程.虽然数学家基于他们的专业知识和对世界的理解来创建模型,而机器学习算法以某种隐蔽的不完全理解的方式描述世界, ...

  7. WeChat-SmallProgram:组件 scroll-view 横向和纵向 案例

    scroll-view为滚动视图,分为水平滚动和垂直滚动.注意滚动视图垂直滚动时一定要设置高度否则的话scroll-view不会生效. 滚动视图常用的地方一般都是Item项比较多的界面,比如我的模块 ...

  8. C#是什么?

    C# 是一个现代的.通用的.面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的. C# 是由 Anders Hejlsberg 和他的团队在 .Net 框 ...

  9. Android的安装

    基于VMware的Android虚拟机搭建 目录 基于VMware的Android虚拟机搭建 下载 安装 配置 使用 下载 进入VMware中国下载VMware Workstation Pro 进入f ...

  10. 【Net】ABP框架学习之正面硬钢

    前言 本文介绍另一种学习ABP框架的方法,该方法为正面硬钢学习法... 我们不去官网下载模板,直接引用DLL,直接使用. WebApi项目创建 首先创建一个WebApi项目,结构如下. 然后Nuget ...