一、使用系统自带的字体

开发Android的人大多都知道,Android里面对字体的支持少得可怜,默认情况下,TextView 的 typeface 属性支持 sans、serif和monospace 这三种字体,如果在没有指定字体的情况下,系统会使用 sans 作为文本显示的字体。但这三种字体只支持英文,也就是说只要你显示的文字是中文,无论你选择这三种字体中的哪一种,显示效果都是一样的。

1.在XML文件中设置

android:id="@+id/sans"

android:text="Hello,World"

android:textSize="20sp"

android:typeface="sans" />

android:id="@+id/serif"

android:text="Hello,World"

android:textSize="20sp"

android:typeface="serif" />

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);

}

}

java字体描边_Android为TextView添加字体库和设置描边相关推荐

  1. python字体描边_Android为TextView添加字体库和设置描边的方法

    一.使用系统自带的字体 开发Android的人大多都知道,Android里面对字体的支持少得可怜,默认情况下,TextView 的 typeface 属性支持 sans.serif和monospace ...

  2. 增加字库 安卓_Android为TextView添加字体库和设置描边的方法

    一.使用系统自带的字体 开发Android的人大多都知道,Android里面对字体的支持少得可怜,默认情况下,TextView 的 typeface 属性支持 sans.serif和monospace ...

  3. 安卓java代码标签_Android实现动态添加标签及其点击事件

    在做Android开发的时候,会遇到动态添加标签让用户选择的功能,所以自己写了个例子,运行效果图如下. 标签可以左右滑动进行选择,点击的时候,会弹出toast提示选择或者取消选择了哪个标签.通过动态添 ...

  4. java 画图 文字 描边_Android开发:文字描边

    1.[代码][Java]代码 package com.example.testproject; import android.content.Context; import android.graph ...

  5. html5字体修改webview,WebView中修改字体

    一般情况下我们做加载网页都是返回一个url,我们进行加载.各种各样的样式都已经在网页中做了处理.但是,也会碰到一些情况,需要我们加载代码片段.还有修改一些样式,比如:修改网页中的字体.当然,本文中的修 ...

  6. PHP生成海报 文字描边,海报字体 怎么为海报字体添加描边样式?海报文字描边怎么做?海报字体描边样式制作...

    今天是十月的最后一天啦,转眼2019年只剩下两个月了,这时间啊,走得真快,还没好好感受呢,都快要2020年了.而小编倒好,还觉得现在是2018年呢~哈哈.好啦,不说废话了,还是来看看今天的教程方案吧! ...

  7. java设置text字体颜色_java itext添加中文文字和设置文字颜色

    java itext添加中文文字和设置文字颜色 下面是示例代码 import java.io.FileOutputStream; import java.io.IOException; import ...

  8. TextView系列:TextView卡通字体描边效果

    今天做一个儿歌MV,蓝湖设计稿如下图: 可以看到需要做描边效果,同时用到对应的字体,字体需要下载或者找设计师要. 原理是在红色字体后面再放一个白色的TextView 主要的坑是:红色的TextView ...

  9. Java实现一行代码生成二维码,可传输到前端展示,可自定义二维码样式,可设置图片格式,可对二维码添加图片,可对二维码添加文字,可以设置二维码大小、字体大小、字体颜色、边框颜色、边框大小等等

    Java实现一行代码生成二维码,可传输到前端展示,可自定义二维码样式,可设置图片格式,可对二维码添加图片,可对二维码添加文字,可以设置二维码大小.字体大小.字体颜色.边框颜色.边框大小等等. 0.准备 ...

最新文章

  1. Mysql VARCHAR(X) vs TEXT
  2. 我为什么不用do{}while()
  3. Decorator Pattern - C# 3.0 Design Patterns
  4. sql 导航函数 lead
  5. mysql apache php 容器_docker 容器的使用[php 5.6 mysql5.7]
  6. 微服务架构下的安全认证与鉴权
  7. DCMTK:转换dicom文件编码
  8. Linux自定义命令
  9. SQL Server 2016 RC0 安装(超多图)
  10. goland中grpc的安装
  11. python 碎片图像拼接_python实现图像拼接
  12. 写JQuery插件的基本知识
  13. 小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计...
  14. Linux查看vga分辨率,调整ubuntu启动界面vga分辨率的方法
  15. 用简单易懂的例子解释隐马尔可夫模型
  16. html 图片左中右排列,详解css布局实现左中右布局的5种方式
  17. 空间几何-欧拉角、四元数、重投影误差
  18. 集合 Collection
  19. 最漂亮HTML5高端个人简历自适应模板
  20. CentOS7内网穿透(公网访问内网)SakuraFrp-frpc配置(从0开始)

热门文章

  1. Python实现基于3σ原则的异常值检测
  2. 用3-sigma原则处理DataFrame中的异常值
  3. STL 中给 vector 去重的三种方法
  4. 软件工程相关文献c 语言,软件工程论文参考文献_1.doc
  5. 抄袭只是表面,本质其实是......
  6. Windows makefile 多个引用库文件路径配置
  7. 看精确召回率和f1得分
  8. 傲腾助力企业数字化转型
  9. 巧妙激发孩子学习英语兴趣
  10. 时下我国鞋业ERP解决方案与需求分析