TextView 调整大小以适合文本
我正在开发一个自定义视图来调整文本视图内文本的大小,使其适合(我不想省略)。
我遇到的问题是,当更改文本大小时,文本视图本身不会重新测量。我一直在查看源代码,发现 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在您的 xml 文件中写入以下代码。
简而言之,在您的 xml 文件中设置 TextView 的固定大小。
In your xml file write the following code.
In short, in your xml file set the fixed size of your TextView.