Bagaimana cara membuat Aktivitas transparan di Android?

915

Saya ingin membuat Kegiatan transparan di atas kegiatan lain.

Bagaimana saya bisa mencapai ini?

UMAR
sumber

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>
gnobal
sumber
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" />
yanchenko
sumber
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>
Andrey
sumber
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.

Deepak Swami
sumber
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" />
Jigar Pandya
sumber
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.

Camille Sévigny
sumber
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 ...

androabhay
sumber
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.

Permata
sumber
9

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

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Leebeedev
sumber
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" />
jian
sumber
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));.

Drew Leonce
sumber
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.

Pavel Kataykin
sumber
2
Jadikan
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" />
Zafer Celaloglu
sumber
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.

Md Sufi Khan
sumber
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

Zohab Ali
sumber
2

Tetapkan tema Tembus

android:theme="@android:style/Theme.Translucent.NoTitleBar"
saurabh
sumber
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 . "

Shubham Soni
sumber
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>
ManiTeja
sumber
0

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

android:theme="@android:style/Theme.Translucent"
Kanagalingam
sumber
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"

Kashkashio
sumber
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.

Bali
sumber