Android视图:onMeasure()onLayout()onDraw()如何限制调用

时间:2017-07-27 07:28:31

标签: android layout view ondraw onmeasure

我很好奇如何限制这些方法的调用onMeasure()onLayout()onDraw()。因为我知道,如果添加任何其他View,每次View需要调整大小时都会调用它们。我在想吗?我想知道如果onMasure()的其余部分具有完全相同的尺寸,如何避免检查尺寸并设置高度和宽度(特别是在Views期间)。在我的应用程序中,View处于片段中,我有<ScrollView>而我<include>更多layouts

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
>
    <ScrollView android:layout_width="match_parent" android:layout_height="match_parent">
        <LinearLayout android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:orientation="vertical"
        >
            <include layout="@layout/firts"/>
            <include layout="@layout/second"/>
            <include layout="@layout/third"/>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

负责设置视图的方法大约被调用10次。我只想设置维度一次,因为我@Override他们要在那里做更多的工作并加载HTML的选项(这些视图是WebView&#39 ; S)。我想只加载一次数据,但由于标题中的方法被多次调用,我会多次加载。它会在我的屏幕上产生某种快门。是否有任何技巧来检查尺寸,如果它们不同,那么再次设置它们还是有办法防止调用这些方法?

@EDIT 这就是我在onMeasure()方法中所做的事情:

@Override
    protected void onMeasure (int widthMeasureSpec,
                    int heightMeasureSpec){
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        System.out.println("Measure size...");
        float density = getResources().getDisplayMetrics().density;
        float height = getResources().getDisplayMetrics().heightPixels;
        setMinimumWidth(Math.round(getWidth()/density));
        setMinimumHeight(Math.round(height/density*2/5));
        this.HTML.prepareViewWidth(Math.round(getWidth()/density), Math.round(height/density*2/5));
    }

其他HTML(需要的基本脚本)已加载到onAttachedToWindow但我不知道在哪里放置此方法:loadDataWithBaseURL。我尝试了上面提到的每个方法onMeasure,onLayout,onDraw,但这样做了10次。

0 个答案:

没有答案