一、使用系统自带的字体

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

1.在XML文件中设置

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代码中实现

//实例化TextViewTextView textView = findViewById(R.id.textview);//得到AssetManagerAssetManager mgr=getAssets();//根据路径得到TypefaceTypeface 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);  }}

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

更多相关文章

  1. Android(安卓)InputMethod设置
  2. Android中Matrix用法实例分析
  3. android http 如何使用Put方式进行网络请求
  4. android UI进阶之实现listview的下拉加载
  5. Android(安卓)Studio使用USB真机调试
  6. 如何打开USB调试模式(Android(安卓)所有版本对应的打开方法)
  7. Android(安卓)设备管理员-android 一键锁屏
  8. Andoird用户界面设计上手指南:设置字体大小
  9. Android(安卓)TextView文字太多显示的最后一行被盖住一半的解决

随机推荐

  1. 如何为一个组件的同一属性同时声明两个值
  2. Android2.2添加busybox 支持——基于Andr
  3. 基于Android DataBinding的InverseBindin
  4. Android中系统自带数据库文件中的多表联
  5. Android]仿通讯录ListView小例子
  6. android 开源 OCR 项目 及手写识别
  7. Android(安卓)- fill_parent、wrap_conte
  8. Android之一个简单计算器源代码
  9. 【Android每日一讲】2012.10.31 关于(abo
  10. Android 解决fragment replace方法低效的