Android编程实现自动调整TextView字体大小以适应文字长度的方法

 更新时间:2016年01月12日 09:29:45   作者:hshm20517  
这篇文章主要介绍了Android编程实现自动调整TextView字体大小以适应文字长度的方法,涉及Android基于TextView类的继承及Paint属性操作实现字体大小自适应的相关技巧,需要的朋友可以参考下

本文实例讲述了Android编程实现自动调整TextView字体大小以适应文字长度的方法。分享给大家供大家参考,具体如下:

package com.test.android.textview;
import android.content.Context;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;
public class CustomTextView extends TextView {
  private static float DEFAULT_MIN_TEXT_SIZE = 10;
  private static float DEFAULT_MAX_TEXT_SIZE = 20;
  // Attributes
  private Paint testPaint;
  private float minTextSize;
  private float maxTextSize;
  public CustomTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initialise();
  }
  private void initialise() {
    testPaint = new Paint();
    testPaint.set(this.getPaint());
    // max size defaults to the intially specified text size unless it is
    // too small
    maxTextSize = this.getTextSize();
    if (maxTextSize <= DEFAULT_MIN_TEXT_SIZE) {
      maxTextSize = DEFAULT_MAX_TEXT_SIZE;
    }
    minTextSize = DEFAULT_MIN_TEXT_SIZE;
  }
  /**
  * Re size the font so the specified text fits in the text box * assuming
  * the text box is the specified width.
  */
  private void refitText(String text, int textWidth) {
    if (textWidth > 0) {
      int availableWidth = textWidth - this.getPaddingLeft() -
        this.getPaddingRight();
      float trySize = maxTextSize;
      testPaint.setTextSize(trySize);
      while ((trySize > minTextSize) &&
          (testPaint.measureText(text) > availableWidth)) {
        trySize -= 1;
        if (trySize <= minTextSize) {
          trySize = minTextSize;
          break;
        }
        testPaint.setTextSize(trySize);
      }
      this.setTextSize(trySize);
    }
  }
  @Override
  protected void onTextChanged(CharSequence text, int start, int before,
    int after) {
    super.onTextChanged(text, start, before, after);
    refitText(text.toString(), this.getWidth());
  }
  @Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    if (w != oldw) {
      refitText(this.getText().toString(), w);
    }
  }
}

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • 使用OkHttp包在Android中进行HTTP头处理的教程

    使用OkHttp包在Android中进行HTTP头处理的教程

    HTTP头部处理是HTTP网络编程中的基本操作,安卓中使用OkHttp包(github.com/square/okhttp)进行相关操作当然也是得心应手,这里我们就来看一下使用OkHttp包在Android中进行HTTP头处理的教程
    2016-07-07
  • android app跳转到微信的示例

    android app跳转到微信的示例

    这篇文章主要介绍了android app跳转到微信的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Android RecyclerView基本使用详解

    Android RecyclerView基本使用详解

    这篇文章主要为大家详细介绍了Android RecyclerView基本使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • 务必掌握的Android十六进制状态管理最佳实践

    务必掌握的Android十六进制状态管理最佳实践

    这篇文章主要为大家介绍了务必掌握的Android十六进制状态管理最佳实践,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Android基于名称、修改时间、大小实现文件夹排序

    Android基于名称、修改时间、大小实现文件夹排序

    这篇文章主要为大家详细介绍了Android基于名称、修改时间、大小实现文件夹排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Android开发之Parcel机制实例分析

    Android开发之Parcel机制实例分析

    这篇文章主要介绍了Android开发之Parcel机制,实例分析了Parcel机制的原理与实现技巧,需要的朋友可以参考下
    2015-05-05
  • Android开发自定义控件之折线图实现方法详解

    Android开发自定义控件之折线图实现方法详解

    这篇文章主要介绍了Android开发自定义控件之折线图实现方法,结合实例形式详细分析了Android自定义控件中折线图原理、实现方法与操作注意事项,需要的朋友可以参考下
    2020-05-05
  • 基于将Android工程做成jar包和资源文件的解决方法

    基于将Android工程做成jar包和资源文件的解决方法

    有时候,我们希望将我们的Android工程提供给第三方开发者使用。这个时候,最普遍的做法,就是提供一个jar包和一堆资源文件,第三方开发者可以将资源文件拷贝到Android工程的相应目录下,同时引用我们提供的jar包,就可以使用我们提供的相应API了
    2013-05-05
  • Android实现房贷计算器

    Android实现房贷计算器

    这篇文章主要为大家详细介绍了Android实现房贷计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Android自定义View实现遥控器按钮

    Android自定义View实现遥控器按钮

    这篇文章主要为大家详细介绍了Android自定义View实现遥控器按钮,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08

最新评论