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

Posted

技术标签:

【中文标题】如何创建仅在上半部分或下半部分带有圆角的布局?【英文标题】:How to create a layout with rounded corners on only the top or bottom half? 【发布时间】:2022-01-12 08:57:32 【问题描述】:

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

视图布局有2个版本;一种在上半部分带有图像,另一种仅包含文本。有几件事让这个布局很难创建;

    图片仅顶部圆润 textview 的下半部分只在底部圆角 如果 ImageView 消失了,那么 textview 确实有圆角。

我宁愿只有一个行布局并用 XML 设计。这可能吗,还是我需要在代码中创建这个布局?

【问题讨论】:

【参考方案1】:

您可以使用材料卡视图来实现此目的。这是完整布局文件的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_
android:layout_>

<com.google.android.material.card.MaterialCardView
    android:layout_
    android:layout_
    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_
        android:layout_
        android:orientation="vertical">

        <ImageView
            android:id="@+id/image"
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:background="#406cca"
            android:visibility="visible" />

        <TextView
            android:id="@+id/text"
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:background="#fb7500" />

    </LinearLayout>

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

</androidx.constraintlayout.widget.ConstraintLayout>

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

希望你能理解。如有任何疑问,请发表评论!

下面是这段代码的图片:

【讨论】:

这行得通。但是,如果您尝试使用 ConstraintLayout 而不是 LinearLayout 一切都将陷入困境。不幸的是,谷歌有时让创建布局变得如此困难。使用 ConstraintLayout 图像拒绝靠近圆角:( @szaske 是的,我明白你的意思。事实上,我最初尝试了约束布局而不是线性布局......我的意思是,你实际上可以通过使用垂直链的约束布局来达到同样的效果。但同样,如果没有图像源,您还希望您的 imageView 消失。所以在垂直链上实现这一点有点令人沮丧。所以我认为最好使用垂直线性布局(如果我在某处错了,请纠正我)【参考方案2】:

您需要创建一个drawable,在drawable中设置corners值,并将drawable设置为您想要顶部圆角的视图的背景。 这是一个有效的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>

【讨论】:

当你添加 &lt;solid android:color="#ABC123"/&gt; 时它会起作用 - 一些用于显示圆角的令人满意的颜色【参考方案3】:

图片持有者请使用library

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

【讨论】:

以上是关于如何创建仅在上半部分或下半部分带有圆角的布局?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone,圆形矩形按钮上半部分和下半部分?

中断的上半部分与下半部分

android 开发布局:如何在屏幕下方显示一排按钮

ARM NEON 内部函数将 D(64 位)寄存器转换为 Q(128 位)寄存器的低半部分,而上半部分未定义

西方经济学。如果需求曲线是线性的(一条直线),那么,需求价格弹性上半部分富有弹性,而下半部分缺乏弹性

ios中怎么让uibutton显示两行文字