将视图的可见性从GONE更改为VISIBLE会导致滞后和缓慢

时间:2018-02-20 07:40:14

标签: android performance android-layout layout visibility

我遇到了这个问题。

我有一个像附加图像的活动。 默认情况下,在工具栏中,仅显示layout1,然后当用户单击layout1时,layout2出现/消失。我正在使用layout1.setOnClickListener,并为layout2设置可见性(layout2.visibility = View.Visible)。它有效,但它非常滞后和缓慢。在我的情况下,由于UI看起来我不想使用不可见的属性。

我正在互联网上搜索解决方案,我认为当我更改视图的布局时,它会重绘其他视图。在这种情况下,重新绘制listView可能会花费很多时间。 你能给我一些解决方案吗?非常感谢你。

[更新] 这是我的xml文件

<RelativeLayout
    android:id="@+id/parentLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <android.support.v7.widget.Toolbar
        android:id="@+id/tool_bar"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:elevation="@dimen/notice_list_toolbar_elevation"
        android:layout_alignParentStart = "true"
        android:layout_alignParentTop = "true"
        android:theme="@style/ToolbarTheme"
        android:paddingRight="10dp"
        android:animateLayoutChanges="true"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:focusable="true"
        android:focusableInTouchMode="true" >

        <LinearLayout
            android:id="@+id/text_search_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <!--layout 1-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <EditText
                    android:id="@+id/keyword_txt"
                    android:layout_width="0dp"
                    android:layout_height="35dp"
                    android:layout_weight="3"
                    android:background="@drawable/custom_textbox"
                    android:drawableLeft="@drawable/ic_search"
                    android:hint="検索"
                    android:textColor="@android:color/black" />
            </LinearLayout>

            <!--layout 2-->
            <LinearLayout
                android:id="@+id/date_search_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:animateLayoutChanges="true"
                android:orientation="horizontal">

                <LinearLayout
                    android:id="@+id/date_search_display"
                    android:layout_width="0dp"
                    android:layout_height="35dp"
                    android:layout_weight="3"
                    android:background="@android:color/white"
                    android:gravity="center"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:clickable="false"
                        android:focusable="false"
                        android:text="売日"
                        android:textAlignment="textStart"
                        android:textColor="@android:color/darker_gray"
                        android:textSize="18sp" />

                    <TextView
                        android:id="@+id/auction_date"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="2"
                        android:clickable="false"
                        android:focusable="false"
                        android:text="@string/not_setting_date"
                        android:textAlignment="textEnd"
                        android:textColor="@android:color/darker_gray"
                        android:textSize="18sp" />

                </LinearLayout>

                <Button
                    android:id="@+id/search_btn"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_marginEnd="5dp"
                    android:layout_marginStart="10dp"
                    android:layout_weight="1"
                    android:background="@android:color/holo_blue_light"
                    android:text="検索"
                    android:textColor="@android:color/white"
                    android:textSize="14sp" />
            </LinearLayout>


        </LinearLayout>

    </android.support.v7.widget.Toolbar>

    <com.astuetz.PagerSlidingTabStrip
        android:id="@+id/tab_strip"
        android:layout_below = "@+id/tool_bar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/notice_list_tab_height"
        android:background="?attr/colorPrimary"
        android:textColor="#ffffff"
        android:textSize="@dimen/notice_list_tab_text_size"
        app:pstsDividerColor="@android:color/transparent"
        app:pstsIndicatorColor="@android:color/white"
        app:pstsIndicatorHeight="@dimen/notice_list_tab_indicator_height"
        app:pstsShouldExpand="true"
        app:pstsUnderlineColor="@android:color/transparent"
        android:visibility="visible"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_below = "@+id/tab_strip"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:nestedScrollingEnabled="false"
        android:layout_width="match_parent"
        android:visibility="visible"/>


</RelativeLayout>

这是我的kotlin代码(与Java相同)

layout1.setOnClickListener{
        if(layout2.visibility == View.GONE){
            layout2.visibility = View.VISIBLE
            layout2.visibility = View.VISIBLE
        }else{
            layout2.visibility = View.GONE
        }

    }

enter image description here

1 个答案:

答案 0 :(得分:0)

使用INVISIBLE代替GONE

当您使用GONE时,您的ui元素没有维度,并且viewgroup不会计算它的大小。但是如果您使用不可见,则您的视图具有维度,但它是隐藏的。

GONE更改为VISIBLE会使视图重新渲染并再次生成您的视图组,这会导致重新渲染出现延迟和问题。