Android为TextView添加字体库和设置描边的方法
发布时间 - 2026-01-11 03:06:25 点击率:次一、使用系统自带的字体

开发Android的人大多都知道,Android里面对字体的支持少得可怜,默认情况下,TextView 的 typeface 属性支持 sans、serif和monospace 这三种字体,如果在没有指定字体的情况下,系统会使用 sans 作为文本显示的字体。但这三种字体只支持英文,也就是说只要你显示的文字是中文,无论你选择这三种字体中的哪一种,显示效果都是一样的。
1.在XML文件中设置
<!-- 使用默认的sans字体--> <TextView android:id="@+id/sans" android:text="Hello,World" android:textSize="20sp" android:typeface="sans" /> <!-- 使用默认的serifs字体--> <TextView android:id="@+id/serif" android:text="Hello,World" android:textSize="20sp" android:typeface="serif" /> <!-- 使用默认的monospace字体--> <TextView android:id="@+id/monospace" android:text="Hello,World" android:textSize="20sp" android:typeface="monospace" />
2.在Java代码中设置
第一步: 获取TextView实例
//获取textView实例 TextView textView = findViewById(R.id.textview);
第二步:设置字体
//设置serif字体 textView.setTypeface(Typeface.SERIF); //设置sans字体 textView.setTypeface(Typeface.SANS_SERIF); //设置monospace字体 textView.setTypeface(Typeface.MONOSPACE);
二、为TextView添加字体库
Android系统自带有对字体的设置,这些设置是对字体的显示方式的设置,比如加粗、倾斜、下划线、字号等,但是并没有提供对于字体类型的徐选择,比如设置成楷体、隶书或雅黑等。Android系统只固定默认一种字体类型,所以如果开发人员需要修改字体类型,那么就必须需自己引入字体库。
1.引入字体库的实现
第一步:在assets目录下新建fonts目录,并把ttf字体文件放到该目录下。
第二步:在Java代码中实现
//实例化TextView TextView textView = findViewById(R.id.textview); //得到AssetManager AssetManager mgr=getAssets(); //根据路径得到Typeface Typeface tf=Typeface.createFromAsset(mgr, "fonts/pocknum.ttf"); //设置字体 textView.setTypeface(tf);
2.引入字体库后的效果图
三、为TextView添加描边
Android的默认控件TextView,相信大家都不会陌生,但是原生的TextView是不支持描边效果的,但是在实际的开发过程中,经常会遇到为TextView添加描边的需求,因此就要对原生的TextView进行拓展,使其支持自定义内部和外部颜色的描边TextView。描边效果的实现原理其实很简单,无非就是获取到TextPaint类,先进行一次比默认大小的文字内容稍微大一点的绘制,然后再进行一次默认大小的文字内容的绘制,然后通过属性设置两种不同的颜色,这样就产生出了描边效果。
为TextView添加描边,要用到TextPaint的几个属性:
TextPaint paint = outlineTextView.getPaint(); //实例化TextPaint对象 paint.setStrokeWidth(15); //设置描边的宽度 paint.setStyle(Paint.Style.STROKE);//设置画笔属性为描边 strokeTextView.setTextColor(Color.parseColor(“#000000”)); //设置描边的颜色(不能与文本颜色一致)
其中strokeTextView为自定义TextView的实例,代码如下:
1.在构造函数中添加
public class StrokeTextView extends TextView {
private TextView outlineTextView = null;
public StrokeTextView(Context context) {
super(context);
outlineTextView = new TextView(context);
init();
}
public StrokeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
outlineTextView = new TextView(context, attrs);
init();
}
public StrokeTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
outlineTextView = new TextView(context, attrs, defStyle);
init();
}
public void init() {
TextPaint paint = outlineTextView.getPaint();
paint.setStrokeWidth(3); //描边宽度
paint.setStyle(Style.STROKE);
outlineTextView.setTextColor(Color.parseColor("#000000")); //描边颜色
outlineTextView.setGravity(getGravity());
}
@Override
public void setLayoutParams (ViewGroup.LayoutParams params) {
super.setLayoutParams(params);
outlineTextView.setLayoutParams(params);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//设置轮廓文字
CharSequence outlineText = outlineTextView.getText();
if (outlineText == null || !outlineText.equals(this.getText())) {
outlineTextView.setText(getText());
postInvalidate();
}
outlineTextView.measure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout (boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
outlineTextView.layout(left, top, right, bottom);
}
@Override
protected void onDraw(Canvas canvas) {
outlineTextView.draw(canvas);
super.onDraw(canvas);
}
}
2.重写onDraw方法
public class StrokeTextView extends TextView {
private TextView outlineTextView = null;
private TextPaint strokePaint;
public StrokeTextView(Context context) {
super(context);
outlineTextView = new TextView(context);
}
public StrokeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
outlineTextView = new TextView(context, attrs);
}
public StrokeTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
outlineTextView = new TextView(context, attrs, defStyle);
}
@Override
public void setLayoutParams (ViewGroup.LayoutParams params) {
super.setLayoutParams(params);
outlineTextView.setLayoutParams(params);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
AssetManager manager = context.getAssets();
String path = "fonts/new_text.ttf";
Typeface type = Typeface.createFromAsset(manager, path);
//设置轮廓文字
CharSequence outlineText = outlineTextView.getText();
if (outlineText == null || !outlineText.equals(this.getText())) {
outlineTextView.setText(getText());
outlineTextView.setTypeface(type);
setTypeface(type);
postInvalidate();
}
outlineTextView.measure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout (boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
outlineTextView.layout(left, top, right, bottom);
}
@Override
protected void onDraw(Canvas canvas) {
AssetManager manager = context.getAssets();
String path = "fonts/new_text.ttf";
Typeface type = Typeface.createFromAsset(manager, path);
if (strokePaint == null) {
strokePaint = new TextPaint();
}
//复制原来TextViewg画笔中的一些参数
TextPaint paint = getPaint();
strokePaint.setTextSize(paint.getTextSize());
strokePaint.setTypeface(type);
strokePaint.setFlags(paint.getFlags());
strokePaint.setAlpha(paint.getAlpha());
//自定义描边效果
strokePaint.setStyle(Paint.Style.STROKE);
strokePaint.setColor(Color.parseColor("#000000"));
strokePaint.setStrokeWidth(4);
String text = getText().toString();
//在文本底层画出带描边的文本
canvas.drawText(text, (getWidth() - strokePaint.measureText(text)) / 2,
getBaseline(), strokePaint);
super.onDraw(canvas);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android添加字体库
# Android设置描边
# Android TextView 去掉自适应默认的fontpadding的实现方法
# Android TextView对齐的两种方法
# Android实现带动画效果的可点击展开TextView
# Android自定义textview实现竖直滚动跑马灯效果
# Android自定义TextView实现drawableLeft内容居中
# Android中TextView显示圆圈背景或设置圆角的方法
# Android UI中TextView的使用方法
# 自定义
# 第二步
# 这三种
# 的人
# 情况下
# 系统自带
# 几个
# 出了
# 目录下
# 大家都
# 两种
# 下划线
# 英文
# 只要你
# 要用
# 三种
# 然后再
# 使其
# 重写
# 但这
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
活动邀请函制作网站有哪些,活动邀请函文案?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
如何彻底删除建站之星生成的Banner?
在线教育网站制作平台,山西立德教育官网?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
清除minerd进程的简单方法
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
UC浏览器如何设置启动页 UC浏览器启动页设置方法
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
如何自定义建站之星网站的导航菜单样式?
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
如何在万网主机上快速搭建网站?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
如何在 React 中条件性地遍历数组并渲染元素
如何用腾讯建站主机快速创建免费网站?
音响网站制作视频教程,隆霸音响官方网站?
如何确保西部建站助手FTP传输的安全性?
,网页ppt怎么弄成自己的ppt?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
Swift中swift中的switch 语句
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
如何破解联通资金短缺导致的基站建设难题?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
简单实现Android验证码
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Laravel怎么上传文件_Laravel图片上传及存储配置
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
,南京靠谱的征婚网站?
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
太平洋网站制作公司,网络用语太平洋是什么意思?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
香港服务器部署网站为何提示未备案?
如何在云虚拟主机上快速搭建个人网站?
Android仿QQ列表左滑删除操作
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
Laravel观察者模式如何使用_Laravel Model Observer配置
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
如何登录建站主机?访问步骤全解析
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
下一篇:服务器架设网站需要哪些步骤?
下一篇:服务器架设网站需要哪些步骤?

