如何在 CardView 中指定 editText 的位置?

How can I specify the position of editText in CardView?

<androidx.cardview.widget.CardView
    app:cardCornerRadius="5dp"
    app:cardElevation="8dp"
    android:layout_width="370dp"
    android:layout_height="450dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:descendantFocusability="beforeDescendants">

    <EditText
        android:id="@+id/heightText"
        android:layout_width="140dp"
        android:layout_height="60dp"
        android:hint="Name"
        android:textAlignment="center"
        android:textStyle="bold" />
</androidx.cardview.widget.CardView>

这是我放在 CardView 中的 EditText 代码。

如何根据需要更改图片中放置的editText的位置?例如,当我尝试用鼠标按住 editText 时,它会自动 returns 到它在图像中的位置。就像被磁化到左上角一样

要在 CardView 中定位视图,您需要将它们嵌套在布局容器视图中,例如 LinearLayoutRelativeLayoutConstraintLayout 等。在 CardView 中

这是一个使用 ConstraintLayout 的例子:

<androidx.cardview.widget.CardView
    app:cardCornerRadius="5dp"
    app:cardElevation="8dp"
    android:layout_width="370dp"
    android:layout_height="450dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:descendantFocusability="beforeDescendants">

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

        <EditText
            android:id="@+id/heightText"
            android:layout_width="140dp"
            android:layout_height="60dp"
            android:hint="Name"
            android:textAlignment="center"
            android:textStyle="bold" 
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"/>
        
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>

那你就可以利用布局容器的规则来合理定位它们了

如果您的 CardView 具有动态高度 (wrap_content),您还需要将 ConstraintLayout 视图高度也设置为 wrap_content 而不是 match_parent.

如果您只有一个视图要放入卡片中,您还可以使用 android:layout_gravity 属性而不是使用布局容器来控制其位置。 CardView inherits from FrameLayout,因此关于定位视图的相同指南适用:

FrameLayout is designed to block out an area on the screen to display a single item. Generally, FrameLayout should be used to hold a single child view, because it can be difficult to organize child views in a way that's scalable to different screen sizes without the children overlapping each other. You can, however, add multiple children to a FrameLayout and control their position within the FrameLayout by assigning gravity to each child, using the android:layout_gravity attribute.