Android如何为同背景色视图添加白色透明叠加层?
问题
我有如下包含多个视图的布局:
<?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" xmlns:tools="http://schemas.android.com/tools" style="@style/backgroundColor" android:layout_width="match_parent" android:id="@+id/root" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.terseel.partner.Views.signin.activity.ActivityLoginEmail"> <LinearLayout app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toTopOf="@+id/btn_delivered_ll" android:layout_width="match_parent" android:layout_height="0dp" android:orientation="vertical"> <include android:id="@+id/toolbar" layout="@layout/login_top" /> <TextView android:id="@+id/loginNow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/m20" android:layout_marginTop="@dimen/m20" android:layout_marginBottom="@dimen/m5" android:fontFamily="@font/semibold" android:text="@string/phone_number_label" android:textColor="@color/hint_color" app:layout_constraintTop_toBottomOf="@+id/toolbar" /> <com.google.android.material.textfield.TextInputLayout android:id="@+id/layoutTextInput" android:layout_width="match_parent" android:layout_height="wrap_content" app:boxStrokeWidth="0dp" app:hintEnabled="false" style="@style/bg_DayNight_borders" android:background="@android:color/transparent" app:boxStrokeColor="@color/background_color" app:endIconMode="clear_text" app:boxBackgroundMode="none" app:passwordToggleTint="@color/colorPrimary" > <EditText android:id="@+id/edt_email" style="@style/bg_DayNight_borders" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/hint_phone" android:fontFamily="@font/regular" android:importantForAutofill="no" android:inputType="phone" android:layout_marginBottom="@dimen/m10" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/loginNow"/> </com.google.android.material.textfield.TextInputLayout> <TextView android:id="@+id/email_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/regular" android:text="@string/use_email" android:gravity="center" android:layout_gravity="center" android:textColor="@color/theme_color" /> <View android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <TextView android:id="@+id/tv_not_partner" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/selectableItemBackground" android:fontFamily="@font/medium_italic" android:gravity="center" android:layout_margin="@dimen/_10sdp" android:layout_gravity="bottom" android:text="@string/signup" android:textColor="@color/theme_color" /> </LinearLayout> <LinearLayout android:id="@+id/btn_delivered_ll" style="@style/bg_DayNight_borders" android:layout_width="0dp" android:layout_height="@dimen/_60sdp" android:gravity="center_vertical" android:paddingStart="@dimen/_12sdp" android:paddingEnd="@dimen/_12sdp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"> <include layout="@layout/layout_loading_button" /> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
目前布局背景色与视图背景色均为#121212,根据Material深色主题设计规范,需要为视图添加任意透明度的白色叠加层来提升层级,请问该如何实现?Android Java中对应的属性是什么?
解决方案
方法一:XML静态设置
Android颜色值采用#AARRGGBB格式,其中AA代表透明度(十六进制范围00-FF,00完全透明,FF完全不透明)。你可以直接用这个格式定义带透明度的白色,或者复用颜色资源:
- 定义颜色资源(可选)
<!-- res/colors.xml --> <!-- 示例:10%透明度的白色 --> <color name="white_10">#1AFFFFFF</color>
- 直接设置给视图背景
如果视图没有原有背景,直接引用颜色:
android:background="@color/white_10"
如果视图已有背景,用LayerDrawable叠加两层背景:
<!-- res/drawable/view_bg_with_overlay.xml --> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 原有背景 --> <item android:drawable="@drawable/your_original_bg" /> <!-- 白色透明叠加层 --> <item android:drawable="@color/white_10" /> </layer-list>
然后替换视图的背景为这个drawable即可。
方法二:Java代码动态设置
通过Color.argb()方法构造带透明度的颜色,参数依次为透明度(0-255)、红、绿、蓝:
- 直接设置纯色背景
// 10%透明度的白色(26/255≈10%) int whiteOverlay = Color.argb(26, 255, 255, 255); yourTargetView.setBackgroundColor(whiteOverlay);
- 叠加在原有背景上
Drawable originalBg = yourTargetView.getBackground(); Drawable overlay = new ColorDrawable(Color.argb(26, 255, 255, 255)); LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{originalBg, overlay}); yourTargetView.setBackground(layerDrawable);
核心属性说明
- XML中:使用
android:background属性,通过颜色值或LayerDrawable实现叠加效果 - Java中:对应
setBackgroundColor(int color)或setBackground(Drawable drawable)方法,颜色通过Color.argb()构造
内容的提问来源于stack exchange,提问作者Robinhood
相关产品推荐
相关产品推荐

