相关疑难解决方法(0)

Android Paint:.measureText()vs .getTextBounds()

我正在测量文本Paint.getTextBounds(),因为我有兴趣获得要渲染的文本的高度和宽度.但是,实际呈现的文本总是比填充.width()Rect信息宽一些getTextBounds().

令我惊讶的是,我进行了测试.measureText(),发现它返回了一个不同的(更高)值.我试一试,发现它是正确的.

为什么他们报告不同的宽度?我怎样才能正确获得高度和宽度?我的意思是,我可以使用.measureText(),但后来我不知道我是否应该相信.height()返回者getTextBounds().

根据要求,这里是重现问题的最小代码:

final String someText = "Hello. I believe I'm some text!";

Paint p = new Paint();
Rect bounds = new Rect();

for (float f = 10; f < 40; f += 1f) {
    p.setTextSize(f);

    p.getTextBounds(someText, 0, someText.length(), bounds);

    Log.d("Test", String.format(
        "Size %f, measureText %f, getTextBounds %d",
        f,
        p.measureText(someText),
        bounds.width())
    );
}
Run Code Online (Sandbox Code Playgroud)

输出显示的差异不仅得到大于1(且没有最后一分钟的舍入误差),也似乎增加与大小(我正要吸引更多的结论,但它可能是完全的字体相关的):

D/Test    (  607): Size 10.000000, measureText 135.000000, …
Run Code Online (Sandbox Code Playgroud)

android textview android-layout

188
推荐指数
6
解决办法
9万
查看次数

如何找到每行的TextView Text字符数?

所以我在android中有一个TextView,它具有整个屏幕长度的宽度和一个dip 5的填充.我如何计算出适合屏幕上一行的字符数?我想换句话说,我正在尝试获取textview的列数?

我考虑了手工计算取决于文本大小和宽度,但是1)不知道相关性和2)由于以倾角为单位的填充,不同的屏幕将使用不同数量的实际像素来填充.

总体问题:我正在尝试使用它来解决:如果给出一个字符串,我怎样才能手动编辑为字符串,这样当textview逐字符打印字符串时,我将知道何时开始一个不适合一个字符的单词下一行.注意:我知道textview会自动放入不适合下一行的单词,但是,由于我是逐个字符打印,比如输入动画,textview不知道这个单词在打印出来之前是不适合的溢出的那个词的字符.

一直在寻找这个......

谢谢!

添加解决方案

一种可能的方案:

public String measure2 (TextView t, String s) {
    String u = "";
    int start = 0;
    int end = 1;
    int space = 0;
    boolean ellipsized = false;
    float fwidth = t.getMeasuredWidth();
    for(;;) {
        //t.setText(s.substring(start, end));
        float twidth = t.getPaint().measureText(s.substring(start, end));
        if (twidth < fwidth){
            if (end < s.length())
                end++;
            else {
                if (!ellipsized)
                    return s;
                return u + s.subSequence(start, end);
            }
        }
        else {
            ellipsized = true;
            space = (u + …
Run Code Online (Sandbox Code Playgroud)

size android text width textview

20
推荐指数
1
解决办法
2万
查看次数

标签 统计

android ×2

textview ×2

android-layout ×1

size ×1

text ×1

width ×1