在 Android 中实现背景半透明,通常有几个常见的方法,取决于你是要 Activity、Dialog 还是 View 背景半透明。我给你详细整理一下:


1️⃣ Activity 背景半透明

方法 A:通过主题实现

在 AndroidManifest.xml 中给 Activity 设置一个半透明主题:

<activity
    android:name=".TransparentActivity"
    android:theme="@style/Theme.Transparent"/>

然后在 res/values/styles.xml 定义这个主题:

<style name="Theme.Transparent" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimEnabled">true</item> <!-- 背景可半透明遮罩 -->
</style>

✅ 这样启动 Activity 时,前一个 Activity 会显示在半透明背景下。


方法 B:在 Activity 中设置透明背景和半透明遮罩

Window window = getWindow();
window.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#80000000"))); // 半透明黑色

  • #80 表示 alpha(透明度),00~FF
  • 后面六位是 RGB 颜色,例如 #80000000 → 50% 黑色

2️⃣ Dialog 背景半透明

方法 A:在 Dialog 样式里设置透明背景

<style name="TransparentDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:backgroundDimEnabled">true</item> <!-- 背景半透明遮罩 -->
</style>

创建 Dialog 时使用这个样式:

Dialog dialog = new Dialog(this, R.style.TransparentDialog);
dialog.setContentView(R.layout.dialog_layout);
dialog.show();

方法 B:直接在 Window 中设置透明背景

Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_layout);
Window window = dialog.getWindow();
if (window != null) {
    window.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#80000000")));
}
dialog.show();


3️⃣ View 背景半透明

如果只是想给某个布局半透明背景,例如 LinearLayout 或 RelativeLayout

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#80000000"
    android:orientation="vertical">
    
    <!-- 内容 -->
</LinearLayout>

  • #80 代表透明度 50%,#40 → 25%,#FF → 100%

✅ 总结

场景方法
Activity主题透明 (windowIsTranslucent=true) 或 Window 设置半透明
DialogDialog 样式透明或 Window 设置半透明
View直接设置背景颜色透明度 (#AARRGGBB)

好的,我给你写一个 完整的半透明 Activity Demo,实现 启动新的 Activity 时,前一个 Activity 在背景中半透明显示


1️⃣ 创建第一个 Activity(MainActivity)

MainActivity.java:

package com.example.transparentdemo;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btnOpen = findViewById(R.id.btn_open);
        btnOpen.setOnClickListener(v -> {
            Intent intent = new Intent(MainActivity.this, TransparentActivity.class);
            startActivity(intent);
        });
    }
}

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:background="#FF6200EE">

    <Button
        android:id="@+id/btn_open"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打开半透明 Activity"/>
</LinearLayout>


2️⃣ 创建半透明 Activity(TransparentActivity)

TransparentActivity.java:

package com.example.transparentdemo;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class TransparentActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transparent);
    }
}

activity_transparent.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:background="#80FFFFFF"> <!-- 半透明白色 -->

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="半透明 Activity"/>
</LinearLayout>


3️⃣ 设置半透明主题

res/values/styles.xml:

<resources>
    <!-- 默认主题 -->
    <style name="Theme.TransparentDemo" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here -->
    </style>

    <!-- 半透明 Activity 主题 -->
    <style name="Theme.TransparentDemo.Transparent" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>
</resources>


4️⃣ 在 AndroidManifest.xml 中应用主题

<activity
    android:name=".TransparentActivity"
    android:theme="@style/Theme.TransparentDemo.Transparent"/>


✅ 效果

  1. 打开 App,显示 MainActivity 紫色背景。
  2. 点击按钮,打开 TransparentActivity
  3. TransparentActivity 的背景半透明,你可以看到 MainActivity 在背后模糊或半透显示。