我有一个包含aScrollView和aLinearLayout及其子元素的布局:aPercentRelativeLayout23.2.1,它下面的另一个LinearLayout和之后的另一个PercentRelativeLayout。中间有一个垂直的。你可以在下面看到一个例子。
在运行时,当我用数据填充LinearLayout时,它的大小会随着我从一个空的开始而增大。一旦它的高度改变到超过屏幕大小,一辆车的上部图像(id=car)就完全从屏幕上消失了,它的高度是一个百分比值。当我上下滚动这个屏幕时,我会同时到达顶部和底部边缘,看不到图像。
我在这个布局中还有一个位置有百分比值,它们定义RecyclerView。这些边缘也消失了。宽度相关的百分比值工作正常。Java代码不包含图像的可见性变化,并且不调整边距。
我目前不确定这个问题是否与某个支持库的特定版本有关,我是在发布这个库的同时构建这个屏幕的。另外,我在棉花糖上看不到这个问题,只有棒棒糖和下面。如果你能帮助我解决这个问题,我将不胜感激。

<!-- a container for all views that should scroll -->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <!-- the first block of views - they need percents -->
    <android.support.percent.PercentRelativeLayout
        android:id="@+id/carHolder"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/car"
            android:layout_width="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:src="@drawable/car"
            app:layout_heightPercenet="25%"/>

        <ImageView
            android:id="@+id/sliderBg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/car"
            android:layout_centerHorizontal="true"
            android:src="@drawable/slider_bg"/>

    </android.support.percent.PercentRelativeLayout>

    <!-- a middle block of views, they don't need percents -->
     <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

         <android.support.v7.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

    </LinearLayout>

    <!-- another block of views, they need percents -->
    <android.support.percent.PercentRelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        <!-- some other views -->

    </android.support.percent.PercentRelativeLayout>

</LinearLayout>

更新
我在支持库23.3.0中也看到了这个问题,不仅当我填充LinearLayoutManager时,而且每次RecyclerView超过屏幕高度时。

最佳答案

不幸的是,百分比布局在m之前不能与scrollview一起使用。原因是它们取决于在测量步骤中传递的大小提示。在m之前,大多数布局在发送未指定的度量规范时将提供大小提示0。
您可以尝试通过创建自己的scrollview子类并重写measurechild和measurechildwithmargins(幸运的是两者都受到保护)来提供大小提示来修复这个问题。
来源-plus.google.com
您可以使用此CustomScrollView使PercentRelativeLayout工作

public class CustomScrollView extends ScrollView {


public CustomScrollView(Context context) {
    super(context);
}

public CustomScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int size = 0;
    int width = getMeasuredWidth();
    int height = getMeasuredHeight();

    if (width > height) {
        size = height;
    } else {
        size = width;
    }
    setMeasuredDimension(size, size);
}
}

来源PercentRelativeLayout inside ScrollView

08-03 23:32