如何在Oncreate中获取TextView的宽度

如何在Oncreate中获取TextView的宽度,第1张

在Oncreate中获取TextView的宽度

在onCreate()里是获取不到控件的width,height的,这个时候控件都没有measure,layout完毕,所以获取到的结果都是0。要获取控件的宽度、高度必须在measure、layout过程完毕之后。

有2种方法:

1如lss所讲的一样:

ViewTreeObserver vto = mBtnSendgetViewTreeObserver();

vtoaddOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

int height = mBtnSendgetMeasuredHeight();

int width = mBtnSendgetMeasuredWidth();

Systemoutprintln("height:" + height + " " + "width:" + width);

}

});

2在Activity里重写方法

public void onWindowFocusChanged(boolean hasFocus);

在窗口第一次获得焦点的时候,肯定能获取到控件的width,height。

很多时候文本框输入的内容是不固定的,有时候输入的内容多一些需要宽一些有时候输入的内容少一些需要窄一些,所以需要设置input的宽度自适应。

工具原料:编辑器、jQuery

1、解决宽度自适应的思路是使用jQuery来监听输入事件,进而进行动态的改变input的宽度,实现input宽度自适应的效果。

2、首选获取文本的宽度,利用pre 元素可定义预格式化的文本,被包围在 pre 元素中的文本通常会保留空格和换行符;而文本也会呈现为等宽字体,简单的代码示例如下:

    var textWidth = function(text){ 

        var sensor = $('<pre>'+ text +'</pre>')css({display: 'none'}); 

        $('body')append(sensor); 

        var width = sensorwidth();

        sensorremove(); 

        return width;

    };

3、根据以上获取到的文字的宽度来给input绑定事件动态改变宽度,简单的代码示例如下:

  $("input")unbind('keydown')bind('keydown', function(){

        $(this)width(textWidth($(this)val()));

    });

你好。

你试下:

sizeWithFont: constrainedToSize: lineBreakMode:

NSString 的方法 可以获取size

1 TextView tv=new TextView(this);

tvgetPaint()setFlags(PaintUNDERLINE_TEXT_FLAG);//下划线

tvsetText("使用代码实现下划线样式");

tvsetTextColor(ColorWHITE);

2 tv=new TextView(this);

tvsetText(HtmlfromHtml("<u>使用html实现下划线样式</u>"));

mPaint =new Paint();

mPaintsetColor(ColorRED);  //设置颜色

mPaintsetARGB(255,255,255,0); //设置透明度颜色

mPaintsetAntiAlias(true);  //这是抗锯齿

mPaintsetStyle(PaintStyleSTROKE);  //描边效果 STROKE FILL FILL_AND_STROKE

mPaintsetStrokeWidth(4);  //设置边框宽度

mPaintsetStrokeCap(PaintCapROUND);  //圆角效果 默认BUTT  圆角ROUND  方角SQUARE

mPaintsetStrokeJoin(PaintJoinBEVEL);  //拐角效果  默认 MITER尖角  ROUND圆角  BEVEL缺角

mPaintsetShader(new SweepGradient(200,200,ColorRED,ColorBLUE)); //设置渐变渲染器

mPaintsetXfermode(new PorterDuffXfermode(PorterDuffModeADD));  //设置图层混合模式

mPaintsetColorFilter(new LightingColorFilter(0x00ffff,0x000000)); //设置颜色过滤器

mPaintsetFilterBitmap(true); //设置双线性过滤 像素间过度效果更加平滑,不会出现马赛克块

//画笔遮罩滤镜,传入度数和样式

mPaintsetMaskFilter(new BlurMaskFilter(10,BlurMaskFilterBlurNORMAL));

mPaintsetTextScaleX(2); //设置文本缩放倍数

mPaintsetTextSize(38); //设置字体大小

mPaintsetTextAlign(PaintAlignLEFT); //设置文本对齐方式

mPaintsetUnderlineText(true);  //设置下划线

String str ="Android高级工程师";

Rect rect =new Rect();

mPaintgetTextBounds(str, 0, strlength(), rect);  //测量文本大小,将文本大小信息存放在rect

float measureSize =mPaintmeasureText(str);  //获取文本宽度

PaintFontMetrics metrics =mPaintgetFontMetrics();  //获取字体度量对象

float ascent = metricsascent;  //字符最高点到baseline的推荐距离

float top = metricstop;        //字符最高点到baseline的最大距离

float descent = metricsdescent; //字符最低点到baseline的推荐距离

float bottom = metricsbottom;  //字符最低点到baseline的最大距离

float leading = metricsleading; //行间距,即ascent到descent的距离

首先你要设定好文本框宽度,然后手动输入字符(最好用数字)来确定文本框有中能输入多少个数字。

一个数字、一个英文字母 = 1个字节

一个汉字 = 2个字节

有了以上信息:我们就可以用js或jquery去获取文本框中的文本,计算文本框中有多少个字节。

假设:

文本框宽 = 30像素 实际可以写入10个数字也就是10个字节,多于10就超出文本框的款度。

再假设文本框中输入:123abc字节数

用js通进正则我们找出汉字个数 乘以 2 就是汉字所占的字节,加上非汉字的字符(全角符号也是2个字节),上例中一个有12个字节

我们知道现文本框中 >10字符就超出了文本框宽度。

以上就是关于如何在Oncreate中获取TextView的宽度全部的内容,包括:如何在Oncreate中获取TextView的宽度、如何让input宽度自适应、怎样获取uitextfield输入文字的矩形的宽度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9393276.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存