gpt4 book ai didi

android - 动态缩放文本以确保它适合单行 TextView

转载 作者:行者123 更新时间:2023-11-30 04:20:20 25 4
gpt4 key购买 nike

我正在尝试制作一个缩放内容的 TextView ,以便它全部显示,没有裁剪、多行或省略号。

我将快速浏览布局以将其置于上下文中。

*有一个包含多个行和列的 GridView 。*gridview 的项目由返回(伪标记 :) )的适配器提供:-

<LinearLayout Orientation=vertical>
<MyCustomTextview name='titletext' Not multiline />
<MyCustomTextview name='itemtext' Not multiline />
</LinearLayout>

我已经尝试覆盖 onSizeChanged 因为这是几个谷歌结果指向我的地方,我开始:-

...
if (this.getLinecount() > 1)
{
this.setTextSize(... currentsize -10);
}
...

这给了我非常小的文本,它会出现在多行上,所以我知道我可以调整大小并确定 TextView 是否正确地多于一行。

所以我进步到:-

while (this.getLinecount() > 1)
{
this.setTextSize(... currentsize - 1);
}

我希望它运行到文本足够小,但是在调用 setTextSize getLineCount() 后返回 0,我相信这是因为它需要重新计算文本大小所以我尝试了 refreshLayout()、forceLayout 的各种组合() 和 invalidate() 无济于事。

我有一个也许更好的方法的想法,但我不知道它是否容易实现:-

onSizeChanged 在 Adapter 放入 Gridview 后被调用,因此我将在那里执行我的代码,但是否可能以及如何执行:-

  • TextView 设置为填充父级的宽度,我能否准确判断文本可用空间宽度的像素大小? (我相信可能有填充等应用)
  • 然后我打算使用 measureText(String) 来查看文本是否适合,如果不适合则减小尺寸并再次检查。

我相信这将是一个很好的解决方案,但我不确定可用空间的准确测量,以及我选择的事件是否是最好的。

如有任何帮助,我们将不胜感激。

  • 安东尼

最佳答案

您不需要为此创建自定义 TextView 。使用 ViewTreeObserver 获取所需的功能。

TextView tv = (TextView)findViewById(R.id.mytextview); 
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(this);

@Override
public void onGlobalLayout() {
if (1 < tv.getLineCount()) {
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX,
tv.getTextSize() - 2);
}
}

关于android - 动态缩放文本以确保它适合单行 TextView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9359507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com