使用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 时,或者可能在更改其布局之前),而在监听器中,我要做的第一件事是从列表中删除监听器。看法。

09-27 12:58