TextView 调整大小以适合文本

发布于 2024-11-01 10:25:44 字数 907 浏览 7 评论 0原文

我正在开发一个自定义视图来调整文本视图内文本的大小,使其适合(我不想省略)。

我遇到的问题是,当更改文本大小时,文本视图本身不会重新测量。我一直在查看源代码,发现 setTextSize() 正在调用以下内容:

nullLayouts();
requestLayout();
invalidate();

所以它应该重新测量。这可能是一个错误,因为它在 2.3 上运行良好,但在 1.6、1.5 和 2.1 模拟器上运行不佳。

这是代码片段,请注意 textview 已扩展:

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    if(w == 0 && h == 0) {
        setTextSize(TypedValue.COMPLEX_UNIT_PX, defaultSize);
    }

    updateView();
}

private void updateView() {
    int viewWidth = getViewWidth();
    float textWidth = getTextWidth();

    float textSize = textSize();
    while(textWidth > viewWidth && textSize >= MIN_TEXT_SIZE) {

        setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize-1);

        textSize = getTextSize();

        textWidth = getTextWidth();
    }
}

任何人都可以给我提示解决此问题的正确方向吗?

I'm working on a custom view to resize the text inside a textview so it'll fit (i don't want to ellipsize).

The trouble i'm having is that when changing the text size, the textview itself is not remeasured. I've been looking at the source and saw that the setTextSize() is calling the following:

nullLayouts();
requestLayout();
invalidate();

So it should've remeasured. This could be a bug because it works fine on 2.3 and not on 1.6, 1.5 and 2.1 emulators.

Here's piece of the code, note that textview is extended:

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    if(w == 0 && h == 0) {
        setTextSize(TypedValue.COMPLEX_UNIT_PX, defaultSize);
    }

    updateView();
}

private void updateView() {
    int viewWidth = getViewWidth();
    float textWidth = getTextWidth();

    float textSize = textSize();
    while(textWidth > viewWidth && textSize >= MIN_TEXT_SIZE) {

        setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize-1);

        textSize = getTextSize();

        textWidth = getTextWidth();
    }
}

Can anyone give me hint in the right direction to solve this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

离鸿 2024-11-08 10:25:44

在您的 xml 文件中写入以下代码。

<TextView
  android:layout_height="40dip"
  android:layout_width="100dip"/>

简而言之,在您的 xml 文件中设置 TextView 的固定大小。

In your xml file write the following code.

<TextView
  android:layout_height="40dip"
  android:layout_width="100dip"/>

In short, in your xml file set the fixed size of your TextView.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文