转自: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;// 验证大部分手机情况下无效值

// Attributes

private 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 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();// 获取改TextView的画布可用大小

float trySize = maxTextSize;

float scaled = getContext().getResources().getDisplayMetrics().scaledDensity;

testPaint.setTextSize(trySize * scaled);// 模拟注意乘以scaled

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

}

};

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

}

}

}

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

android edittext字体间隔,android Edittext内容字体大小动态变化相关推荐

  1. android中按钮间隔,Android布局有2个均匀间隔的按钮

    我有这个布局正常工作,相对布局与文本视图和两个按钮均匀分布在它下面. android:layout_width="fill_parent" android:layout_heigh ...

  2. android+动态地图+效果图,Android百度地图绘制圆形,圆形半径可动态变化

    问题:百度地图绘制圆形,圆形半径可随进度拖动条发生改变 思路:圆形本身是一个覆盖物,可参考百度地图Demo中的OverlayDemo.java这个类进行实现.完成画圆之后,圆形半径如何随着进度条的拖动 ...

  3. android服务重启间隔,android – 崩溃的服务在很长一段时间后重新启动

    从 com/android/server/am/ActiveServices.java(未曝光) // How long we wait for a service to finish executi ...

  4. android timepicker 设置间隔,android – 如何在TimePicker中设置AM / PM?

    我在我的应用程序中使用TimePicker.每当用户使用TimePicker打开屏幕时,我会使用当前时间对其进行初始化.当我这样做时,TimePicker显示AM而不是PM.为什么会这样?我的代码中有 ...

  5. android vsync信号间隔,Android SurfaceFlinger服务(五) ----- VSync信号的产生

    Android为了增强界面流畅度引入了VSync机制.VSync信号一般由硬件产生,为了兼容一些老的机器,也可以软件产生.因些,就可以分为硬件VSync和软件VSync.VSync的生成逻辑主要在HW ...

  6. 如何实现轮播图的内容的多少随div的大小动态变化_小程序学习日志8:swiper滑动轮播组件(轮播图)(上)...

    导读 经过这段时间的学习,大家对小程序的编程和代码掌握的如何了呢? 今天我们来讲小程序里实现轮播图的方法,大家要专心看哦. 组件 这个组件叫做滑块组件,嗯,听起来还挺形象的,你看滑动轮播图的时候是不是 ...

  7. android优化中国风应用、完整NBA客户端、动态积分效果、文件传输、小说阅读器等源码...

    Android精选源码 android拖拽下拉关闭效果源码 一款优雅的中国风Android App源码 EasySignSeekBar一个漂亮而强大的自定义view15 android仿蘑菇街,蜜芽宝 ...

  8. android开发EditText的Hint字体默认样式和下载字体样式的适配问题。

    紧张了几个月的奋战终于项目到了测试阶段,真是泪奔啊,回想这段时间的地狱生涯 真实汗颜啊~~~~,闲话不多说了,看图说话, 问题,相信这张图片已经展示的很明白了 下来在来看看我的代码 <EditT ...

  9. android设置字体滚动,EditText如何设置滚动效果,字体满了继续输入可以滚动查看...

    当输入文字过多的时候,固定的高度,让字体可以滚动查看: android:id="@+id/ScrollView2" android:layout_width="fill_ ...

最新文章

  1. 名图怎么弄云服务器_云服务器购买了宽带的速度怎么测试?
  2. 51单片机中的定时器
  3. Leaflet中使用Leaflet.Path.Transform插件实现旋转图形
  4. spring mysql 注解_【Spring】SpringMVC之基于注解的实现SpringMVC+MySQL
  5. ArcGIS 10.6字段计算器(Field Calculator)字段任意填充编码序列(奇数、偶数序列、自定义间隔)
  6. junit5和junit4_JUnit 5符合AssertJ
  7. java中的starts_Java Math类静态double nextAfter(double starts,double direction)示例
  8. jvm 加载class文件过程
  9. 苹果从来不飙配置,也从不关注配置,即使一般的配置也能卖好价钱,为啥没人喷?
  10. scan——Theano中循环的实现
  11. 13、三维图绘制及添加文本
  12. c++ 覆盖、重载与隐藏
  13. 数据分析可视化图表mysql_50个最有价值的数据可视化图表
  14. Linux读写txt文件
  15. 搜狗新闻文本分析实例代码
  16. JS 的内联模式与外联模式
  17. 汇编语言(第四版)(个人复习点)
  18. android平台支付宝快捷支付
  19. Kubernetes(k8s)从入门到精通
  20. 论个人英雄主义的失败

热门文章

  1. 蓝桥杯java抽签_第七届蓝桥杯Java A——抽签
  2. .net/C# 微信小程序如何生成二维码图片
  3. 我的世界盒子下载|我的世界盒子下载
  4. Linux下通过Wine安装微信
  5. 一个程序猿的时间管理
  6. android210的启动logo的修改
  7. Java实现RPG游戏
  8. 崩坏三 电子显示屏 信号干扰效果
  9. Serverless 架构演进与实践
  10. 【c语言】航班订票系统