ScrollView中的PercentRelativeLayout

我使用ScrollView创建了一个布局,其中有一个PercentRelativeLayout作为其子PercentRelativeLayout 。 它不适用于Lollipop和旧设备,但在Marshmallow设备上工作正常。 请检查以下代码:

             

而且我的android:fillViewport="true" ,它在Lollipop和较旧的Android版本中都没有显示任何内容。

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

您可以尝试通过创建自己的ScrollView子类并重写measureChildmeasureChildWithMargins (幸运的是两者都受到保护)来修复它,以提供大小提示。

来源 – plus.google.com。

有人可以帮我创建自定义ScrollView以使其工作吗?

    创建一个自定义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

        

    在此处输入图像描述 希望这会有所帮助。

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

    对我有用的方法是:

      

    然后将视图与该视图对齐。 RelativeLayout或TextViews。 你失去了对RelativeLayout百分比的控制(如果你曾经拥有它)。 我喜欢这样的事情:

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

    这有帮助吗?

    我遇到了与Android K和android L相同的问题

    您可以使用约束布局而不是百分比相对布局,但似乎也存在滚动问题。 即使是其他答案中建议的自定义滚动视图对我也没有帮助。

    虽然有办法。

    将百分比相对布局转换为相对布局,并根据设备高度以编程方式设置视图的高度。

    滚动相对布局似乎没有问题。 您可以使用“空间”视图查看TextView之间的边距。 这不是一个非常优雅的解决方案,但对我来说它有效。

    Java代码:

     int height = getWindowManager().getDefaultDisplay().getHeight(); int width = getWindowManager().getDefaultDisplay().getWidth(); // to set height to each textview to 10% of screen textView1.getLayoutParams().height = (int) (height * 0.10); textView2.getLayoutParams().height = (int) (height * 0.10); textView3.getLayoutParams().height = (int) (height * 0.10); textView4.getLayoutParams().height = (int) (height * 0.10); textView5.getLayoutParams().height = (int) (height * 0.10); textView6.getLayoutParams().height = (int) (height * 0.10); // to set width to each textview to 50% of screen textView1.getLayoutParams().width = (int) (width * 0.50); textView2.getLayoutParams().width = (int) (width * 0.50); textView3.getLayoutParams().width = (int) (width * 0.50); textView4.getLayoutParams().width = (int) (width * 0.50); textView5.getLayoutParams().width = (int) (width * 0.50); textView6.getLayoutParams().width = (int) (width * 0.50); // for margin between textviews space1.getLayoutParams().height = (int) (height * 0.10); space2.getLayoutParams().height = (int) (height * 0.10); space3.getLayoutParams().height = (int) (height * 0.10); space4.getLayoutParams().height = (int) (height * 0.10); space5.getLayoutParams().height = (int) (height * 0.10); 

    XML代码: