首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 透明 Activity 實作:主題樣式設定與應用場景

     編輯:程式設計綜合問答

需求:建立一個**透明背景**的 Activity,疊加在另一個 Activity 之上(如對話框、浮動選單、載入遮罩)。核心在於定義透明主題並套用至目標 Activity。

完整主題定義 (res/values/styles.xml)

<resources>
    <style name="Theme.Transparent" parent="android:Theme">
        <!-- 核心透明屬性 -->
        <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:windowIsFloating">true</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>
</resources>

屬性解析

屬性作用
windowIsTranslucent啟用半透明視窗模式,允許背景透顯
windowBackground設定視窗背景為透明色 (#00000000 或 @android:color/transparent)
windowContentOverlay移除預設標題欄陰影/覆蓋層
windowNoTitle隱藏標題欄
windowIsFloating標記為浮動視窗,系統會適當調整佈局
backgroundDimEnabled關閉背景變暗(預設會讓底層 Activity 變暗)

套用至 Activity (AndroidManifest.xml)

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

啟動方式

// 一般啟動
startActivity(new Intent(this, TransparentActivity.class));

// 若需帶參數
Intent intent = new Intent(this, TransparentActivity.class);
intent.putExtra("message", "載入中...");
startActivity(intent);

進階:半透明遮罩 + 內容置中(對話框風格)

佈局 (res/layout/activity_transparent.xml)

<FrameLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#80000000"> <!-- 50% 黑色遮罩 -->

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@drawable/bg_rounded_white"
        android:orientation="vertical"
        android:padding="24dp">

        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal" />

        <TextView
            android:id="@+id/tvMessage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:text="載入中..."
            android:textColor="@android:color/black" />
    </LinearLayout>
</FrameLayout>

背景圖形 (res/drawable/bg_rounded_white.xml)

<shape xmlns:android="https://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/white" />
    <corners android:radius="12dp" />
</shape>

現代替代:DialogFragment / BottomSheetDialogFragment

透明 Activity 適合**全螢幕覆蓋、需獨立生命週期**的場景。若只是彈出對話框、底部選單,建議使用:

  • DialogFragment:標準對話框,支援返回鍵關閉、旋轉保持
  • BottomSheetDialogFragment:Material Design 底部彈頁,支援拖拽展開/收合
  • PopupWindow:輕量級錨點彈窗

這些方案不需在 Manifest 註冊 Activity,生命週期自動綁定宿主 Fragment/Activity,程式碼更簡潔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved