Android为TextView添加字体库和设置描边的方法

一、使用系统自带的字体

开发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); } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-10-22 12:09:32

Android为TextView添加字体库和设置描边的方法的相关文章

Android给TextView添加点击事件的实现方法_Android

首先设定TextView的clickable属性为true. 可以在布局文件中进行设定,比如: <TextView android:id="@+id/phone" android:clickable="true" --------->设定此属性 android:layout_marginLeft="10dp" android:layout_below="@id/address" android:layout_toR

Android给TextView添加点击事件的实现方法

首先设定TextView的clickable属性为true. 可以在布局文件中进行设定,比如: <TextView android:id="@+id/phone" android:clickable="true" --------->设定此属性 android:layout_marginLeft="10dp" android:layout_below="@id/address" android:layout_toR

android 别人请求添加我为好友时监听器的方法一个都没反应。

问题描述 android 别人请求添加我为好友时监听器的方法一个都没反应. EMContactManager.getInstance().setContactListener(new MyContactListener()); private class MyContactListener implements EMContactListener { @Override public void onContactAdded(List<String> usernameList) { // 保存增

Android TextView中文字通过SpannableString设置属性用法示例_Android

本文实例讲述了Android TextView中文字通过SpannableString设置属性的方法.分享给大家供大家参考,具体如下: 在Android中,TextView是我们最常用的用来显示文本的控件. 一般情况下,TextView中的文本都是一个样式.那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过SpannableString的具体实例操作来演示一下. //创建一个 SpannableString对象 SpannableStri

Android使用selector修改TextView中字体颜色和背景色的方法_Android

本文实例讲述了Android使用selector修改TextView中字体颜色和背景色的方法.分享给大家供大家参考,具体如下: android中的selector大家都很熟悉了,用它可以很方便的实现,控件在不同的动作中,颜色等值的变化.这里我说一下TextView中的一些应用. 我想大家都知道,Button按钮在源码上看是一种特殊的TextView,所以我们很多时候,按钮全是使用的TextView来完成,只要加一个android:clickable="true"就可以了. TextVi

iOS如何使用自己添加的字体库_IOS

有时候为了界面的美观,可能需要添加第三方的字体库.那个如何使用呢? 1.将字体库添加到项目中. 2.在info.plist中添加新的一栏如下所示. 如果需要添加多个字体的话,再点击"+",进行添加 3.在target-->Build Phases-->Copy Bundle Resources中将info.plist中添加的字体添加上. 否则会出现找不到资源的情况 4.有时候文件名和真实的字体名称还不同.比如截图中使用的是test.ttf,这个不是真实的字体名称.这时候我们

如何在PowerPoint2013中添加文本框和设置文本

  在PowerPoint中输入文本也是我们常用的,那么,我们应该怎么输入和设置文本呢?下面,我们就一起来学习一下在PowerPoint2013中添加文本框和设置文本的方法. 操作步骤 1.用PowerPoint2013打开一篇文稿,并选择我们需要插入文本框的页,切换到"插入"选项卡,我们现在单击"文本"选项组中的"文本框"命令,然后大家可以根据自己的需要选择文本框的类型,例如,我们现在选择"横排文本框". 2.此时鼠标变成可

咪咕音乐播放器如何添加曲库歌曲到播放列表

  咪咕音乐播放器添加曲库歌曲到播放列表的方法如下: 通过咪咕曲库选择或查找存在的音乐文件→点击"试听/添加"按钮→添加到咪咕音乐播放器的播放列表中.制文件夹中所有内容到移动设备中.

Win7系统查看字体库的技巧

  绝大多数人使用电脑无非是聊天.编辑文件,这些操作让大家对字体有了一定的认识,例如:宋体.繁体.楷体.黑体--同时,大家也知道在自己的电脑里并不是所有的字体都是这样的常用,还有一些字体比如:Batang.DFKai-SB等一系列用英文字母组成的,我们甚至从来没有用过这样的奇怪字体,但实际上用起来的效果和一些字体模式很雷同,所以与其保留着让我们眼花缭乱选字体,不如卸载他们节省内存和时间.想要卸载他们,就要用到字体库啦,但我么恩似乎只知道字体而不知道什么叫字体库,也不知道用什么方法打开字体库,下面