Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置EditText值会导致重新测量和UI布局_Android_Android Ui - Fatal编程技术网

Android 设置EditText值会导致重新测量和UI布局

Android 设置EditText值会导致重新测量和UI布局,android,android-ui,Android,Android Ui,我有一个相当复杂的用户界面——很多视图和相当多的层次结构。我正在努力减少这个,但我注意到了一些非常奇怪的事情 从支持模型更新UI;当模型更改时,我在后台线程中重新计算模型,然后在UI线程上,我将更新后的模型传递给各个组件以重新显示它们的信息。传递模型和进行所有(例如)textview.setText调用大约需要200-300毫秒。但是,在更新功能完成后的5秒钟内,UI实际上不会更新 我在ddms中使用了方法分析工具来查看发生了什么,在更新完成后的几秒钟内,似乎进行了大量的测量和布局调用-我在一些

我有一个相当复杂的用户界面——很多视图和相当多的层次结构。我正在努力减少这个,但我注意到了一些非常奇怪的事情

从支持模型更新UI;当模型更改时,我在后台线程中重新计算模型,然后在UI线程上,我将更新后的模型传递给各个组件以重新显示它们的信息。传递模型和进行所有(例如)textview.setText调用大约需要200-300毫秒。但是,在更新功能完成后的5秒钟内,UI实际上不会更新

我在ddms中使用了方法分析工具来查看发生了什么,在更新完成后的几秒钟内,似乎进行了大量的测量和布局调用-我在一些地方覆盖了onLayout,而且似乎即使只设置一个值也会导致整个UI重新测量和布局

所以我的问题是这是否正常,;我可以看到它需要一些时间来更新,但5秒似乎是一个很长的时间。当应用程序启动时,可能需要几秒钟才能显示UI,所以我想知道UI是否太复杂了。这是Android 4.0.4的Galaxy标签10.1


谢谢

事实证明,布局重量可能非常昂贵。应用程序的主面板由同一自定义视图的两个实例组成,使用布局权重将其一分为二:

<LinearLayout ...>
    <CustomView 
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight="1" />
    <CustomView 
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight="1" />
</LinearLayout>
此更改将对每个自定义视图的onMeasure调用的数量从4个减少到2个,这是一个显著的节约。因此,这里学到的经验是,如果视图在运行时实际上不需要调整大小,那么最好在代码中计算宽度,而不是依赖XML中的布局权重

int halfScreenWidth = ...;
for(View v : new View[]{customViewA, customViewB})
{
    LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) v.getLayoutParams();
    lp.width = halfScreenWidth;
    v.setLayoutParams(lp);
}