是否可以在线性布局中约束两个小部件?

时间:2019-12-25 03:43:32

标签: android xml android-studio

我的布局是一个约束布局,但是在内部有一个cardview,并且在其中创建了线性布局,因此我可以将图像连续放置(这是带有X按钮的第一个图像):

enter image description here

我希望每个图像(应该连续3张)都有一个X按钮。 X按钮应位于每个图像内,如下所示:

enter image description here

我更喜欢使用线性布局,以使图像彼此独立(以后它们将是可移动的)。

我想在图像的轮廓内将X按钮附加到图像上,这在约束布局中非常简单,但在线性布局中却不可能?是否有其他方法可以限制图像中的X按钮?

我当前的XML:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activities.EditProfileActivity">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="300dp"
        app:cardBackgroundColor="@color/grey"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/profilePic1"
                android:layout_width="120dp"
                android:layout_height="120dp"
                android:scaleType="centerCrop"
                app:srcCompat="@drawable/profile_pic1">
            </ImageView>
            <Button
                android:id="@+id/deletePic1"
                android:layout_width="@dimen/delete_picture_button_size"
                android:layout_height="@dimen/delete_picture_button_size"
                android:background="@drawable/delete_button"
                android:translationX="5dp"
                android:translationY="5dp"
                app:layout_constraintBottom_toBottomOf="@+id/profilePic1"
                app:layout_constraintEnd_toEndOf="@+id/profilePic1" />


        </LinearLayout>


    </androidx.cardview.widget.CardView>

3 个答案:

答案 0 :(得分:2)

您可以使用CardView内的ConstraintLayout来完成此操作:

        <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/profilePic1"
            android:layout_width="0dp"
            android:layout_height="120dp"
            android:scaleType="centerCrop"
            app:layout_constraintEnd_toStartOf="@+id/profilePic2"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@drawable/ic_person" />

        <androidx.appcompat.widget.AppCompatImageButton
            android:id="@+id/deletePic1"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:background="@drawable/style_white_cornar"
            android:translationX="5dp"
            android:translationY="5dp"
            app:layout_constraintBottom_toBottomOf="@+id/profilePic1"
            app:layout_constraintEnd_toEndOf="@+id/profilePic1" />

        <ImageView
            android:id="@+id/profilePic2"
            android:layout_width="0dp"
            android:layout_height="120dp"
            android:scaleType="centerCrop"
            app:layout_constraintEnd_toStartOf="@+id/profilePic3"
            app:layout_constraintStart_toEndOf="@+id/profilePic1"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@drawable/ic_person" />

        <androidx.appcompat.widget.AppCompatImageButton
            android:id="@+id/deletePic2"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:background="@drawable/style_white_cornar"
            android:translationX="5dp"
            android:translationY="5dp"
            app:layout_constraintBottom_toBottomOf="@+id/profilePic2"
            app:layout_constraintEnd_toEndOf="@+id/profilePic2" />

        <ImageView
            android:id="@+id/profilePic3"
            android:layout_width="0dp"
            android:layout_height="120dp"
            android:scaleType="centerCrop"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/profilePic2"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@drawable/ic_person" />

        <androidx.appcompat.widget.AppCompatImageButton
            android:id="@+id/deletePic3"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:background="@drawable/style_white_cornar"
            android:translationX="5dp"
            android:translationY="5dp"
            app:layout_constraintBottom_toBottomOf="@+id/profilePic3"
            app:layout_constraintEnd_toEndOf="@+id/profilePic3" />

    </androidx.constraintlayout.widget.ConstraintLayout>

答案 1 :(得分:1)

您可以使用CardView内部的ConstraintLayout来做到这一点:

<androidx.constraintlayout.widget.ConstraintLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/profilePic1"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:scaleType="centerCrop"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/square_pipe_icon" />

    <androidx.appcompat.widget.AppCompatImageButton
        android:id="@+id/deletePic1"
        android:layout_width="@dimen/delete_picture_button_size"
        android:layout_height="@dimen/delete_picture_button_size"
        android:background="@drawable/delete_button"
        android:translationX="5dp"
        android:translationY="5dp"
        app:layout_constraintBottom_toBottomOf="@+id/profilePic1"
        app:layout_constraintEnd_toEndOf="@+id/profilePic1" />
</androidx.constraintlayout.widget.ConstraintLayout>

答案 2 :(得分:1)

使用ON DUPLICATE UPDATE而不是FrameLayout

做这样的事情

LinearLayout