转自:edittext内容随字体大小动态变化,具体代码如下:

package com.yitong.mbank.android.views;import android.content.Context;import android.graphics.Paint;import android.graphics.Paint.FontMetrics;import android.util.AttributeSet;import android.widget.EditText;public class AutoAdjustSizeEditText extends EditText {private static float DEFAULT_MIN_TEXT_SIZE = 10; // 最小的字体大小private static float DEFAULT_MAX_TEXT_SIZE = 20;// 验证大部分手机情况下无效值// Attributesprivate Paint testPaint;private float minTextSize, maxTextSize;public AutoAdjustSizeEditText(Context context, AttributeSet attrs) {super(context, attrs);initialise();}private void initialise() {testPaint = new Paint();testPaint.set(this.getPaint()); // 获取模拟的paint// max size defaults to the intially specified text size unless it is// too smallmaxTextSize = 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();// 获取改TextView的画布可用大小        float trySize = maxTextSize;float scaled = getContext().getResources().getDisplayMetrics().scaledDensity;testPaint.setTextSize(trySize * scaled);// 模拟注意乘以scaledwhile ((trySize > minTextSize)&& (testPaint.measureText(text) > availableWidth)) {trySize -= 2;FontMetrics fm = testPaint.getFontMetrics();float scaled1 = (float) (this.getHeight() / (Math.ceil(fm.descent - fm.top) + 2));float scaled2 = (float) ((testPaint.measureText(text) / availableWidth));if (scaled1 >= 1.75 & scaled1 >= scaled2) {// 注意1.75是三星s4 小米3// 的适合数值(当然包括我的联想了)break;}if (trySize <= minTextSize) {trySize = minTextSize;break;}testPaint.setTextSize(trySize * scaled);}this.setTextSize(trySize);// 等同于this.getPaint().set(trySize*scaled);}};@Overrideprotected void onTextChanged(CharSequence text, int start, int before,int after) {super.onTextChanged(text, start, before, after);refitText(text.toString(), this.getWidth());}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {if (w != oldw) {refitText(this.getText().toString(), w);}}}

然后直接在你的xml布局文件中这样使用:

 

更多相关文章

  1. Android 同个TextView设置字体大小不一样
  2. 调整recovery界面菜单字体大小
  3. Android Studio 2.3 在小米手机中 调试安装Apk失败
  4. Android getDimensionPixelSize, 代码中设置字体大小,读xml配置。
  5. Android 单独控件实现不同字体大小、不同颜色
  6. android 根据TextView宽度 自动缩小字体大小 以适应其宽度
  7. android studio 更改背景和设置字体大小
  8. 教你如何修改Android默认字体大小和设置字体大小比例

随机推荐

  1. Android(安卓)使用SQLCipher对sqlite进行
  2. Android的Widget编写实例
  3. 构建Android自适应布局应用方案解析
  4. Android(安卓)6.0权限请求相关及权限分组
  5. 关于Android(安卓)Studio里的Gradle,你所
  6. Android(安卓)学习笔记 - 《第一行代码 A
  7. Android开发实战之——ProgressDialog的
  8. Android不明原因崩溃,不断重启解决办法记
  9. Android(安卓)新API 之 MediaCodec使用笔
  10. Android本地视频播放器开发--ffmpeg解码