在 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 设置半透明 |
Dialog | Dialog 样式透明或 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"/>
✅ 效果
- 打开 App,显示
MainActivity
紫色背景。 - 点击按钮,打开
TransparentActivity
。 TransparentActivity
的背景半透明,你可以看到MainActivity
在背后模糊或半透显示。
发表回复