【发布时间】:2012-10-13 12:21:08
【问题描述】:
我正在创建一个显示经常变化的值的网格。因此,我使用了一个 TextView,它会在其内容更改时自动调整大小 (Auto Scale TextView Text to Fit within Bounds)。调整大小发生,但视图布局不正确
问题是,当我使用 HierarchyViewer 检查活动时,布局显示为我想要的。
我的猜测是 HierarchyViewer 在视图上调用 requestLayout() 或 invalidate(),但我尝试过没有成功。这段代码在主活动中被调用,没有任何效果。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getWindow().getDecorView().requestLayout();
getWindow().getDecorView().invalidate();
}
}, 5000);
我也尝试在调整大小后使视图无效。
TextView 的重力设置为Center,如果没有调整大小,它看起来没问题。
欢迎任何提示,提前谢谢!
【问题讨论】:
-
您是否尝试过请求父视图而不是装饰视图的布局?
-
装饰视图不是View树的父节点吗?我读到请求视图上的布局会导致其所有子级请求布局。无论如何,我会说我已经尝试过,因为我已经尝试了很多东西,但是当我尝试你的建议时我会报告。引用 view.View 上的 requestLayout 文档,“当某些事情发生变化时调用这个,这使得该视图的布局无效。这将安排视图树的布局传递。”
-
确实如此,但我看不出您的代码有什么问题。 requestLayout() 布局一个父视图和它的子视图,但我只在我的应用程序直接控制的视图上调用它,所以这只是一个想法。
-
已修复!我必须使用处理程序在其中一个视图父级上调用 requestLayout。我不知道为什么它在使用装饰视图时不起作用,我在 UI 线程上调用它,但我还是很高兴 :D 因为我必须给予赏金,请回答问题
-
看起来你已经想通了,所以我会让你保留赏金(假设你在自己的问题上接受赏金时会发生这种情况)。