Bagaimana cara membuat Aktivitas transparan di Android?


Jawaban:


1393

Tambahkan gaya berikut dalam res/values/styles.xmlfile Anda (jika Anda tidak memilikinya, buatlah.) Berikut ini file lengkap:

<?xml version="1.0" encoding="utf-8"?>
<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>

(Nilainya @color/transparentadalah nilai warna #00000000yang saya masukkan ke res/values/color.xmlfile. Anda juga dapat menggunakan @android:color/transparentversi Android yang lebih baru.)

Kemudian terapkan gaya tersebut ke aktivitas Anda, misalnya:

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

13
Saya menggunakan<item name="android:windowBackground">@android:color/transparent</item>
Seseorang Di suatu tempat

33
Bagus! Hanya satu peningkatan: Jika Anda menggunakan parent = "@ android: style / Theme.Dialog" Anda akan mendapatkan perilaku dialog yang tepat. Itu berarti memudar masuk / keluar alih-alih meluncur masuk / keluar (seperti aktivitas)
PakitoV

73
Seperti @Emilio menyebutkan ini akan berperilaku seperti dialog, terutama karena android:windowIsFloatingdisetel ke true. Hapus properti ini untuk berperilaku seperti aktivitas normal (dalam hal ini akan cocok android:style/Theme.Translucent.NoTitleBar)
aromero

38
Saya menghapus <item name = "android: windowIsFloating"> true </item> untuk memiliki aktivitas layar penuh & transparan
Kiem Duong

12
Aktivitas saya berasal dari AppCompatActivity. Begitu parent="android:Theme"juga menabrak aplikasi saya. Saya baru saja menghapusnya dan itu bekerja seperti pesona. Terima kasih!
Atul

193

Bunyinya seperti ini:

<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />

3
Anda cukup menambahkan tema karena alex telah memposting ke deklarasi aktivitas Anda di manifes - bit ini android: theme = "@ android: style / Theme.Translucent.NoTitleBar, untuk setiap Aktivitas Anda dapat menetapkannya dengan tema Translucent
Donal Rafferty

12
@UMMA: Menggunakan satu tanda tanya biasanya cukup. Beragam tanda tanya membuat orang yang meluangkan waktu untuk menjawab pertanyaan Anda berpikir Anda melompat ke wajah mereka.
Matthias

7
@Matthias mereka biasanya, karena bos mereka melompat di tempat mereka
Reno

16
@ user1129443: 50% black should be #7f000000. Setiap komponen (A, R, G, B) dapat mengambil nilai dari 0-255. 50% of 255 = 127. 127 in Hex = 7FItu cara menghitung transparansi (opacity)
Nam Trung

4
Metode ini semacam mengunci UI saat aktivitas berjalan tetapi karena diatur ke tembus, Seseorang tidak dapat melakukan apa pun. Apakah ada cara untuk menghindari penguncian UI ini.
Akhil Latta

126

Di styles.xml:

<style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.NoActionBar">
    <item name="android:background">#33000000</item> <!-- Or any transparency or color you need -->
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>

Di AndroidManifest.xml:

<activity
    android:name=".WhateverNameOfTheActivityIs"
    android:theme="@style/Theme.AppCompat.Translucent">
    ...
</activity>

1
Jika Anda berencana untuk benar-benar menampilkan sesuatu pada Kegiatan ini (katakanlah Dialog atau DialogFragment), Anda akan melihat bahwa semuanya bertema Gelap. Jadi, Anda mungkin ingin tema Anda mewarisi Theme.Appcompat.Light.NoActionBardarinya.
tir38

1
dalam kasus saya itu menunjukkan latar belakang hitam. Saya punya tema orang tua mengatur sesuatu yang lain tetapi pada satu kegiatan tertentu saya mengubah tema seperti yang disebutkan. Setiap bantuan?
Abdul Waheed

4
Bekerja sangat baik ketika saya menghapus "android: background"
Oded Breiner

2
Saya pikir Anda ingin menghapus backgrounddan menempatkan warna semi transparan pilihan Anda diwindowBackground
hmac

Ini harus menjadi jawaban jika aktivitas Anda menggunakan AppCompatActivity berbeda dengan jawaban @ gnobal.
AeroEchelon

37

Nyatakan aktivitas Anda di manifes seperti ini:

 <activity   
     android:name=".yourActivity"    
     android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>

Dan tambahkan latar belakang transparan ke tata letak Anda.


Cara terbaik. Terima kasih
Peter

5
Anda perlu menggunakan tema Theme.AppCompat (atau keturunan) dengan aktivitas ini.
Puni

28

Tetapkan tema transparan ke aktivitas yang ingin Anda buat transparan dalam file manifes Android proyek Anda:

<activity
    android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

16

Saya ingin menambahkan ini sedikit karena saya juga seorang pengembang Android baru. Jawaban yang diterima sangat bagus, tetapi saya mengalami beberapa masalah. Saya tidak yakin bagaimana cara menambahkan warna ke file colors.xml. Inilah cara yang harus dilakukan:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <color name="class_zero_background">#7f040000</color>
     <color name="transparent">#00000000</color>
</resources>

Dalam file colors.xml asli saya, saya memiliki tag "drawable":

<drawable name="class_zero_background">#7f040000</drawable>

Jadi saya melakukan itu untuk warna juga, tapi saya tidak mengerti bahwa referensi "@ color /" berarti mencari tag "color" dalam XML. Saya pikir saya harus menyebutkan ini juga untuk membantu orang lain.


16

Saya mencapainya di 2.3.3 dengan hanya menambahkan android:theme="@android:style/Theme.Translucent" tag aktivitas di manifes.

Saya tidak tahu tentang versi yang lebih rendah ...


Ini berfungsi dengan baik untuk 2.2 juga. Saya baru saja membuat aktivitas sederhana dengan tampilan daftar dan mengapung di atas aktivitas terakhir.
slot

Itu ditambahkan di API 1, itu tidak masalah :)
xmen

6
Jangan gunakan AppCompatActivityjika Anda menggunakan ini.
zackygaurav

bekerja di 7.0 juga jadi pendekatan yang bagus. Saya memodifikasinya menjadi @android: style / Theme.Translucent.NoTitleBar.Fullscreen
Sandeep

16

Dalam kasus saya, saya harus mengatur tema pada runtime di java berdasarkan beberapa kondisi. Jadi saya membuat satu tema dengan gaya (mirip dengan jawaban lain):

<?xml version="1.0" encoding="utf-8"?>
<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>

Kemudian di Jawa saya menerapkannya pada aktivitas saya:

@Override
protected void onCreate(Bundle savedInstanceState) {

    String email = getIntent().getStringExtra(AppConstants.REGISTER_EMAIL_INTENT_KEY);
    if (email != null && !email.isEmpty()) {
        // We have the valid email ID, no need to take it from user,
        // prepare transparent activity just to perform bg tasks required for login
        setTheme(R.style.Theme_Transparent);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

    } else
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_dummy);
}

Ingat satu poin penting di sini: Anda harus memanggil setTheme()fungsi sebelumnya super.onCreate(savedInstanceState);. Saya melewatkan poin ini dan berhenti selama 2 jam, berpikir mengapa tema saya tidak tercermin pada saat run time.


9

Di fungsi onCreate , di bawah setContentView , tambahkan baris ini:

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

23
Membuat latar belakang menjadi benar-benar HITAM untuk beberapa alasan.
Subin Sebastian

punyaku @SubinSebastian, apakah ada yang menemukan perbaikan untuk itu?
finnmglas

8

Biarkan saja gambar latar belakang aktivitas menjadi transparan. Atau tambahkan tema dalam file XML:

<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />

7

Cara termudah yang saya temukan adalah mengatur tema aktivitas di AndroidManifest menjadi android:theme="@android:style/Theme.Holo.Dialog".

Kemudian dalam metode onCreate aktivitas, panggil getWindow().setBackgroundDrawable(new ColorDrawable(0));.


6

Untuk kegiatan dialog, saya menggunakan ini:

getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);

Tetapi Anda juga perlu mengatur Tampilan utama Anda dalam aktivitas menjadi tidak terlihat. Kalau tidak, latar belakang tidak akan terlihat sementara semua tampilan di dalamnya akan terlihat.


2

5

selain jawaban di atas:

untuk menghindari crash terkait aktivitas Android Oreo

<style name="AppTheme.Transparent" parent="@style/Theme.AppCompat.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowCloseOnTouchOutside">false</item>
</style>

<activity
     android:name="xActivity"
     android:theme="@style/AppTheme.Transparent" />

2
Pada 2018, ini harus menjadi jawaban terbaik
Geek Guy

memberi saya latar belakang hitam pada emulator dengan API 28
Seseorang di suatu tempat

Saya mencoba ini untuk memperbaiki kerusakan yang terkait dengan pengaturan orientasi di android 8.0 tetapi saya masih mendapatkan IllegalStateException: Hanya aktivitas layar penuh yang meminta orientasi
Rahul Sahni

3

Saya hanya melakukan dua hal, dan itu membuat kegiatan saya transparan. Mereka ada di bawah.

  1. Dalam file manifes saya baru saja menambahkan kode di bawah ini di tag aktivitas .

    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
  2. Dan saya hanya mengatur latar belakang tata letak utama untuk aktivitas itu sebagai " # 80000000 ". Suka

    android:background="#80000000"

Ini sangat cocok untuk saya.


3

Jika Anda menggunakan AppCompatActivitykemudian tambahkan inistyles.xml

<style name="TransparentCompat" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>

Dalam manifestfile Anda dapat menambahkan tema ini ke tag aktivitas seperti ini

android:theme="@style/TransparentCompat"

untuk lebih jelasnya baca artikel ini


2

Tetapkan tema Tembus

android:theme="@android:style/Theme.Translucent.NoTitleBar"

2

Ada dua cara:

  1. Menggunakan Theme.NoDisplay
  2. Menggunakan Theme.Translucent.NoTitleBar

Menggunakan Theme.NoDisplaymasih akan berfungsi ... tetapi hanya pada perangkat Android yang lebih lama. Pada Android 6.0 dan lebih tinggi, menggunakan Theme.NoDisplay tanpa memanggil finish()di onCreate() (or, technically, before onResume())akan kecelakaan aplikasi Anda. Inilah sebabnya mengapa rekomendasi ini digunakan Theme.Translucent.NoTitleBar, yang tidak menderita keterbatasan ini . "


1

Catatan 1: Di folder Drawable buat test.xml dan salin kode berikut

   <?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <stroke android:width="2dp" />

    <gradient
        android:angle="90"
        android:endColor="#29000000"
        android:startColor="#29000000" />

    <corners
        android:bottomLeftRadius="7dp"
        android:bottomRightRadius="7dp"
        android:topLeftRadius="7dp"
        android:topRightRadius="7dp" />

</shape>

// Catatan: Sudut dan bentuk sesuai kebutuhan Anda.

// Catatan 2: Buat xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/test"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1.09"
            android:gravity="center"
         android:background="@drawable/transperent_shape"
            android:orientation="vertical" >
     </LinearLayout>
    </LinearLayout>

0

Cukup tambahkan baris berikut ke tag aktivitas di file manifes Anda yang perlu terlihat transparan.

android:theme="@android:style/Theme.Translucent"

0

Semua jawaban itu mungkin membingungkan, ada perbedaan antara aktivitas Transparan dan Tidak ada aktivitas UI.

Menggunakan ini:

android:theme="@android:style/Theme.Translucent.NoTitleBar"

Akan membuat aktivitas transparan tetapi akan memblokir UI.

Jika Anda menginginkan aktivitas Tidak Ada UI selain menggunakan ini:

android:theme="@android:style/Theme.NoDisplay"


0

Anda dapat menghapus setContentView(R.layout.mLayout)dari aktivitas Anda dan menetapkan tema sebagai android:theme="@style/AppTheme.Transparent". Periksa tautan ini untuk detail lebih lanjut.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.