Android片段仅部分重新渲染

时间:2018-03-19 14:44:26

标签: android android-fragments android-viewpager

出于某种原因,我的片段的UI无法使用新SDK正确地重新渲染。这仅适用于安装了Android 8.0或更高版本的Android设备。

当在UI中进行更改时,似乎实际上只有1/4的屏幕被重新渲染。因此,旧的项目仍然可以在屏幕上看到,新项目仅在屏幕的左上角1/4处呈现。

当我开始拖动(甚至只是一点点)时,视图会重新调整并完全呈现。

我在下方添加了一些图片来演示正在发生的事情。为了使它更清晰,我已经将红色和蓝色碎片的背景着色,因此您可以看到哪些部分已经重新渲染。正如您在图2中看到的,只有片段的一部分已呈现。在图片3中拖动一点(有多个标签)后,片段就完全呈现了。

1 Before UI update

2 After UI update

3 After UI update and dragging

我的viewpager / tablayout活动的布局如下:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMaxWidth="0dp"
        app:tabGravity="fill"
        app:tabMode="fixed"
        android:fillViewport="false" />
</android.support.design.widget.AppBarLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

我的片段中的布局如下。有两个部分。一次只能看到一个,另一个看到GONE。具有id&#34; step1&#34;的RelativeLayout;以VISIBLE开头,以及&#34; step2&#34;从GONE开始。按下按钮&#34; step1&#34;将设置为GONE和&#34; step2&#34;可见。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".depot.fragment.StockFragment">

<RelativeLayout
    android:id="@+id/step1"
    android:background="@color/holo_blue_dark"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="16dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Kies het pand" />

        <RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:orientation="vertical"
            android:id="@+id/radio_group">

        </RadioGroup>

    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_alignParentBottom="true"
        android:id="@+id/footer">

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"/>

        <Button
            style="@style/Widget.AppCompat.Button.Borderless"
            android:layout_width="wrap_content"
            android:layout_height="48dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:id="@+id/button_next"
            android:text="Volgende"/>
    </RelativeLayout>

</RelativeLayout>

<RelativeLayout
    android:id="@+id/step2"
    android:background="@color/holo_red_dark"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/header_step2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="16dp">

        <TextView
            android:id="@+id/depot_choice"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/Material.header"
            android:text="Kies het pand" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:text="Klik op de knop rechtersonderin het scherm om scannen te starten." />

    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/tableContainer"
        android:layout_below="@+id/header_step2"
        android:layout_above="@+id/footer_step2">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </android.support.v7.widget.RecyclerView>

        <android.support.design.widget.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            app:elevation="6dp"
            app:backgroundTint="@color/accent"
            android:src="@drawable/ic_border_color_black_24dp"
            android:id="@+id/floating_qrcode_manual"
            android:layout_alignParentBottom="true"
            android:layout_toLeftOf="@+id/floating_qrcode_scan"
            android:layout_toStartOf="@+id/floating_qrcode_scan"
            android:layout_marginBottom="10dp"
            android:layout_marginRight="20dp"
            android:layout_marginEnd="20dp"/>

        <android.support.design.widget.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            app:elevation="6dp"
            app:backgroundTint="@color/accent"
            android:src="@drawable/qrcode_scan"
            android:id="@+id/floating_qrcode_scan"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_marginBottom="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginEnd="10dp"
            android:layout_alignParentEnd="true" />

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_alignParentBottom="true"
        android:id="@+id/footer_step2">

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/divider_light"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"/>

        <Button
            style="@style/Widget.AppCompat.Button.Borderless"
            android:layout_width="wrap_content"
            android:layout_height="48dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:id="@+id/button_prev"
            android:text="Ander pand kiezen"/>
    </RelativeLayout>

</RelativeLayout>

有人能帮我找到这段代码的问题吗?

1 个答案:

答案 0 :(得分:0)

我终于设法找到了问题所在。

它与ViewPager无关。只有AndroidManifest中的设置搞砸了android 8.0之后的片段重新渲染。

导致问题的设置如下:

<supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true" />

删除这些解决了这些问题。