使用ViewTreeObserver时遇到很大的困难。在某些不可预测的时间段内,所有功能都可以正常工作,然后监听器将不再运行。肯定是因为文档中写的内容:不保证返回的ViewTreeObserver观察器在此View 的生命周期内保持有效
因此,每次更改 View 时,我都会重做设置:
protected void shrinkToFit(final TextView t) {
if(vto==null||!vto.isAlive()){
vto = t.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
doAdjust(t);
}
});
}
}
这是我如何调用它:
TextView t = (TextView) findViewById(R.id.maindesc);
t.setTextSize(Constants.MAINDESC_SIZE);
String todisp_1 = tarifreadtemp.area_desc + ":"
+ tarifreadtemp.area_tarifuserdesc;
shrinkToFit(t);
t.setText(todisp_1);
t.invalidate();
最佳答案
通常,我在重绘或更改布局之前将addOnGlobalLayoutListener
监听器添加到我的 View 中(这可能发生在我第一次初始化 View 时,或者可能在更改其布局之前),而在监听器中,我要做的第一件事是从列表中删除监听器。看法。