我有一个包含aScrollView
和aLinearLayout
及其子元素的布局:aPercentRelativeLayout
23.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