在api 19上忽略ViewGroup的边距/填充。仅在以编程方式设置并且视图被回收时才起作用

时间:2018-01-23 00:09:37

标签: android android-layout layout android-constraintlayout

我成功地在另一个布局中包含了约束布局。但这仅在我运行大于19的API时才有效。在使用API​​ 19的所有设备上,忽略了包含的constraintlayout的边距和填充值,这完全困扰了最终的布局。

API 19及以下的布局是否有任何限制?正如我已经说过的,处理API>时,每个标记都可以正常工作。 19。

以下是我想要包含的xml代码:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                         xmlns:app="http://schemas.android.com/apk/res-auto"
                                         android:id="@+id/cardBack"
                                         android:layout_width="@dimen/card_width_shop"
                                         android:layout_height="@dimen/card_height_shop"
                                         android:layout_gravity="center"
                                         android:background="@drawable/card_bg_black"
                                         android:padding="@dimen/card_back_padding">

在Android Studio设计器中,一切看起来都很好(填充工作正常): enter image description here

我已经尝试过:
- 用15dp替换填充参考 - 仍然无效。
- 删除填充属性并为布局中的子项设置边距 - 仍然无法正常工作 - 将布局包装在RelativeLayout内并将填充传递给此布局 - 仍然无法正常工作 - 用原始xml文件的xml替换include标记 - 仍然无法正常工作。所以看来这个问题与include标签没有任何关系 - 用RelativeLayout替换ConstraintLayout - 仍然不起作用。
- 以编程方式设置填充 - 仅在视图被回收后工作(在GridView中)。其他用途:仍然无效。

2 个答案:

答案 0 :(得分:0)

修改

使用此代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp">
    <ImageView
        android:id="@+id/image1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/def_user"/>
    <ImageView
        android:id="@+id/image2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/def_user"/>
    <ImageView
        android:id="@+id/image3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:src="@drawable/def_user"/>
    <ImageView
        android:id="@+id/image4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:src="@drawable/def_user"/>

</RelativeLayout>

添加:

  

或者您可以使用此层次结构:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="10dp" // you can use margin for ConstraintLayout , in this case you will have a space between constraintLayout and relative layout
    >

<RelativeLayout
     android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="5dp" // or you can use padding for relativeLayout and you will have space between images and parent(RelativeLayout)
    >
    <ImageView
        android:id="@+id/image1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/def_user"/>
    <ImageView
        android:id="@+id/image2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/def_user"/>
    <ImageView
        android:id="@+id/image3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:src="@drawable/def_user"/>
    <ImageView
        android:id="@+id/image4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:src="@drawable/def_user"/>

</RelativeLayout>

</android.support.constraint.ConstraintLayout>

答案 1 :(得分:0)

因此,出于一些奇怪的原因,当我完全删除填充并分别为孩子设置边距时,它会起作用。