Android组件背景设置

手机APP/开发
158
0
0
2024-08-12
标签   Android

前言

Android使用XML的时候,实现圆角和边框都是使用背景实现的。

如果需要剪裁成圆角,则可以使用CardView实现。

CardView

设置圆角

<androidx.cardview.widget.CardView
    android:layout_width="330dp"
    android:layout_height="166dp"
    android:layout_centerInParent="true"
    android:visibility="@{viewModel.zIsShowMsg ? View.VISIBLE : View.GONE}"
    app:cardCornerRadius="10dp">
</androidx.cardview.widget.CardView>

取消阴影

要取消或移除 CardView 的阴影,你可以调整 CardViewcardElevation 属性,并将其设置为 0dp

此外,你还可以调整 cardUseCompatPadding 属性以确保没有额外的内边距用于显示阴影。

下面是如何设置 CardView 以取消阴影的示例:

<androidx.cardview.widget.CardView
    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="wrap_content"
    app:cardElevation="0dp"
    app:cardUseCompatPadding="false">
    
    <!-- CardView的内容 -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="这是一个没有阴影的CardView"
        android:gravity="center"
        android:padding="16dp" />

</androidx.cardview.widget.CardView>

在这个例子中,CardViewcardElevation 设置为 0dp,以确保没有阴影。

此外,将 cardUseCompatPadding 设置为 false 可以消除由于阴影而产生的额外内边距,使 CardView 边缘更加紧凑。

内部剪裁

设置clipChildren即可

android:clipChildren="true"

背景圆角和边框

rounded_border_background.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#aaFFFFFF" /> <!-- 背景颜色 -->
    <corners android:radius="10dp" /> <!-- 圆角半径 -->
    <stroke
        android:width="2dp"
        android:color="#FFFFFFff" /> <!-- 边框颜色 -->
</shape>

按钮背景

按钮可以使用selector设置点击和非点击使用不同的背景

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false" android:drawable="@drawable/rounded_border_backgroundt"/>
    <item android:state_pressed="true" android:drawable="@drawable/rounded_border_background2"/>
</selector>

涟漪效果

兼容不支持涟漪的XML

z_bg_ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false" android:drawable="@drawable/rounded_border_backgroundt"/>
    <item android:state_pressed="true" android:drawable="@drawable/rounded_border_background2"/>
</selector>

添加drawable-v21文件夹 只有21版本之后才支持涟漪效果

z_bg_ripple.xml

<?xml version="1.0" encoding="utf-8"?><!-- ripple 是5.0才出现的新标签-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/text99">
    <item android:drawable="@drawable/rounded_border_background" />
</ripple>

背景多层渐变,点击涟漪

实现方式

  • 底层纯色背景。
  • 中层设置渐变,注意XML的渐变效果最多只支持3个颜色。
  • 顶层设置涟漪效果。

bg_gradient_btn.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 底层:纯色背景 -->
    <item android:top="6dp">
        <shape android:shape="rectangle">
            <solid android:color="#2B89E0" />
            <corners android:radius="6dp" />
        </shape>
    </item>
    <!-- 中间层:渐变背景 -->
    <item android:bottom="3dp" >
        <shape android:shape="rectangle">
            <gradient
                android:angle="-90"
                android:centerColor="#32C8FD"
                android:endColor="#36B3FE"
                android:startColor="#8AEFFD"
                android:type="linear" />
            <corners android:radius="6dp" />
        </shape>
    </item>
    <!-- 顶层 -->
    <item android:drawable="@drawable/bg_gradient_ripple_effect"/>
</layer-list>

添加一个涟漪效果的XML

bg_gradient_ripple_effect.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#000000">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#33FFFFFF"/>
            <corners android:radius="6dp"/>
        </shape>
    </item>
</ripple>

注意

涟漪效果的背景不能是全透明的,如果全透明就不会出现涟漪效果,所以这里设置为白色的半透明,涟漪覆盖色就设置的纯黑色,这样才会出现较好的效果。