android edittext字体间隔,android Edittext内容字体大小动态变化
转自: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内容字体大小动态变化相关推荐
- android中按钮间隔,Android布局有2个均匀间隔的按钮
我有这个布局正常工作,相对布局与文本视图和两个按钮均匀分布在它下面. android:layout_width="fill_parent" android:layout_heigh ...
- android+动态地图+效果图,Android百度地图绘制圆形,圆形半径可动态变化
问题:百度地图绘制圆形,圆形半径可随进度拖动条发生改变 思路:圆形本身是一个覆盖物,可参考百度地图Demo中的OverlayDemo.java这个类进行实现.完成画圆之后,圆形半径如何随着进度条的拖动 ...
- android服务重启间隔,android – 崩溃的服务在很长一段时间后重新启动
从 com/android/server/am/ActiveServices.java(未曝光) // How long we wait for a service to finish executi ...
- android timepicker 设置间隔,android – 如何在TimePicker中设置AM / PM?
我在我的应用程序中使用TimePicker.每当用户使用TimePicker打开屏幕时,我会使用当前时间对其进行初始化.当我这样做时,TimePicker显示AM而不是PM.为什么会这样?我的代码中有 ...
- android vsync信号间隔,Android SurfaceFlinger服务(五) ----- VSync信号的产生
Android为了增强界面流畅度引入了VSync机制.VSync信号一般由硬件产生,为了兼容一些老的机器,也可以软件产生.因些,就可以分为硬件VSync和软件VSync.VSync的生成逻辑主要在HW ...
- 如何实现轮播图的内容的多少随div的大小动态变化_小程序学习日志8:swiper滑动轮播组件(轮播图)(上)...
导读 经过这段时间的学习,大家对小程序的编程和代码掌握的如何了呢? 今天我们来讲小程序里实现轮播图的方法,大家要专心看哦. 组件 这个组件叫做滑块组件,嗯,听起来还挺形象的,你看滑动轮播图的时候是不是 ...
- android优化中国风应用、完整NBA客户端、动态积分效果、文件传输、小说阅读器等源码...
Android精选源码 android拖拽下拉关闭效果源码 一款优雅的中国风Android App源码 EasySignSeekBar一个漂亮而强大的自定义view15 android仿蘑菇街,蜜芽宝 ...
- android开发EditText的Hint字体默认样式和下载字体样式的适配问题。
紧张了几个月的奋战终于项目到了测试阶段,真是泪奔啊,回想这段时间的地狱生涯 真实汗颜啊~~~~,闲话不多说了,看图说话, 问题,相信这张图片已经展示的很明白了 下来在来看看我的代码 <EditT ...
- android设置字体滚动,EditText如何设置滚动效果,字体满了继续输入可以滚动查看...
当输入文字过多的时候,固定的高度,让字体可以滚动查看: android:id="@+id/ScrollView2" android:layout_width="fill_ ...
最新文章
- 名图怎么弄云服务器_云服务器购买了宽带的速度怎么测试?
- 51单片机中的定时器
- Leaflet中使用Leaflet.Path.Transform插件实现旋转图形
- spring mysql 注解_【Spring】SpringMVC之基于注解的实现SpringMVC+MySQL
- ArcGIS 10.6字段计算器(Field Calculator)字段任意填充编码序列(奇数、偶数序列、自定义间隔)
- junit5和junit4_JUnit 5符合AssertJ
- java中的starts_Java Math类静态double nextAfter(double starts,double direction)示例
- jvm 加载class文件过程
- 苹果从来不飙配置,也从不关注配置,即使一般的配置也能卖好价钱,为啥没人喷?
- scan——Theano中循环的实现
- 13、三维图绘制及添加文本
- c++ 覆盖、重载与隐藏
- 数据分析可视化图表mysql_50个最有价值的数据可视化图表
- Linux读写txt文件
- 搜狗新闻文本分析实例代码
- JS 的内联模式与外联模式
- 汇编语言(第四版)(个人复习点)
- android平台支付宝快捷支付
- Kubernetes(k8s)从入门到精通
- 论个人英雄主义的失败