ScrollView中的PercentRelativeLayout

我已经创build了一个使用ScrollView的布局,其中有一个PercentRelativeLayout作为其子。 它不适用于棒棒糖和较旧的设备,但在棉花糖设备上工作正常。 请检查下面的代码:

 <ScrollView android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <android.support.percent.PercentRelativeLayout android:id="@+id/scrollContent" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_heightPercent="100%" app:layout_widthPercent="50%"> <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/holo_red_dark" android:text="kkjknadko" android:textColor="@android:color/black" app:layout_heightPercent="10%" app:layout_widthPercent="50%"/> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView1" android:text="Abcaad" android:textColor="@android:color/black" app:layout_heightPercent="10%" app:layout_marginTopPercent="10%" app:layout_widthPercent="50%"/> <TextView android:id="@+id/textview3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textview2" android:background="@android:color/holo_red_dark" android:text="Abcd" android:textColor="@android:color/black" app:layout_heightPercent="10%" app:layout_marginTopPercent="10%" app:layout_widthPercent="50%"/> <TextView android:id="@+id/textview4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textview3" android:text="Abcd" android:textColor="@android:color/black" app:layout_heightPercent="10%" app:layout_marginTopPercent="10%" app:layout_widthPercent="50%"/> <TextView android:id="@+id/textview5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textview4" android:background="@android:color/holo_red_dark" android:text="Abcd" android:textColor="@android:color/black" app:layout_heightPercent="10%" app:layout_marginTopPercent="10%" app:layout_widthPercent="50%"/> <TextView android:id="@+id/textview6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textview5" android:text="Abcd" android:textColor="@android:color/black" app:layout_heightPercent="10%" app:layout_marginTopPercent="10%" app:layout_widthPercent="50%"/> <TextView android:id="@+id/textview7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textview6" android:text="Abcd" android:textColor="@android:color/black" app:layout_heightPercent="10%" app:layout_marginTopPercent="10%" app:layout_widthPercent="50%"/> <TextView android:id="@+id/textview8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textview7" android:text="Abcd" android:textColor="@android:color/black" app:layout_heightPercent="10%" app:layout_marginTopPercent="10%" app:layout_widthPercent="50%"/> </android.support.percent.PercentRelativeLayout> </ScrollView> 

而且我也android:fillViewport="true" ,它不显示任何棒棒糖和较旧的Android版本。

不幸的是,百分比布局不适用于M之前的ScrollView 。原因在于它们取决于在测量步骤中传递的尺寸提示。 在M之前,大多数布局会在发送未指定的测量规格时提供尺寸提示0。

您可以尝试通过创build自己的ScrollView的子类来解决这个问题,并覆盖measureChildmeasureChildWithMargins (幸好两者都受保护)以提供大小提示。

source – plus.google.com。

有人可以帮助我创build自定义ScrollView ,使其工作?

Solutions Collecting From Web of "ScrollView中的PercentRelativeLayout"

创build一个自定义的scrollview并设置Measured HeightWidth如你想要的例子

CustomScrollView

 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); } } 

在你的xml中使用customscrollview

  <yourscrollviewclasspath.CustomScrollView // here you have scrollview path like com.yourpackage.folder_where_your_scrollview_lies xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" > </yourscrollviewclasspath.CustomScrollView > 

在这里输入图像说明 希望这会有所帮助。

我所理解的问题是:我希望这些TextViews是父视图的50%宽度。

对我有用的方法是:

 <Space android:layout_width="20dp" android:layout_height="20dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:id="@+id/space" /> 

然后把视图对准那个。 可以是RelativeLayout或TextViews。 你失去了对RelativeLayout的控制(如果你曾经有过)。 我倾向于像这样的东西:

  android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" 

这有帮助吗?