如何创建仅在上半部分或下半部分具有圆角的布局?

How to create a layout with rounded corners on only the top or bottom half?

我正在尝试将行项目添加到 RecyclerView 中,如下所示:

视图布局有2个版本;一个在上半部分带有图像,一个仅包含文本。一些事情使这个布局难以创建;

  1. 图像仅在顶部变圆
  2. textview 下半部分仅在底部呈圆形
  3. 如果 ImageView 消失了,那么 textview 确实有圆顶角。

我更喜欢只有一行布局并在 XML 中设计。这可能吗,还是我需要在代码中创建此布局?

您需要创建一个drawable,在drawable中设置corners值,并将drawable设置为您想要顶部圆角的视图的背景。 这是一个可用的可绘制对象:

<!--  res/drawable/rounded_edittext.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >
    <corners android:topLeftRadius="15dp"
        android:topRightRadius="15dp"/>
    <solid android:color="#ABC123"/>
   
</shape>

您可以使用 material cardview 实现此目的。这是完整布局文件的 xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.google.android.material.card.MaterialCardView
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_margin="10dp"
    app:cardCornerRadius="30dp"
    app:layout_constraintDimensionRatio="1:1"
    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="vertical">

        <ImageView
            android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#406cca"
            android:visibility="visible" />

        <TextView
            android:id="@+id/text"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#fb7500" />

    </LinearLayout>

</com.google.android.material.card.MaterialCardView>

</androidx.constraintlayout.widget.ConstraintLayout>

请记住,如果图像不存在,只需在代码中将 recyclerview 中该特定图像视图的可见性设置为 View.GONE。

我希望你明白了。如有任何疑问,请发表评论!

这里是这段代码的图片:

对于图片持有者使用此 library

<com.makeramen.roundedimageview.RoundedImageView
     android:id="@+id/imgUser"
     android:layout_width="match_parent"
     android:layout_height="100dp"
     app:riv_corner_radius_top_left="5dp"
     app:riv_corner_radius_top_right="5dp"/>