Jawaban:
Tambahkan gaya berikut dalam res/values/styles.xml
file 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/transparent
adalah nilai warna #00000000
yang saya masukkan ke res/values/color.xml
file. Anda juga dapat menggunakan @android:color/transparent
versi Android yang lebih baru.)
Kemudian terapkan gaya tersebut ke aktivitas Anda, misalnya:
<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
android:windowIsFloating
disetel ke true. Hapus properti ini untuk berperilaku seperti aktivitas normal (dalam hal ini akan cocok android:style/Theme.Translucent.NoTitleBar
)
AppCompatActivity
. Begitu parent="android:Theme"
juga menabrak aplikasi saya. Saya baru saja menghapusnya dan itu bekerja seperti pesona. Terima kasih!
Bunyinya seperti ini:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
50% black should be #7f000000
. Setiap komponen (A, R, G, B) dapat mengambil nilai dari 0-255
. 50% of 255 = 127. 127 in Hex = 7F
Itu cara menghitung transparansi (opacity)
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>
Theme.Appcompat.Light.NoActionBar
darinya.
background
dan menempatkan warna semi transparan pilihan Anda diwindowBackground
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.
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" />
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:
<?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.
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 ...
AppCompatActivity
jika Anda menggunakan ini.
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.
Di fungsi onCreate , di bawah setContentView , tambahkan baris ini:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
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));
.
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.
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" />
Saya hanya melakukan dua hal, dan itu membuat kegiatan saya transparan. Mereka ada di bawah.
Dalam file manifes saya baru saja menambahkan kode di bawah ini di tag aktivitas .
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
Dan saya hanya mengatur latar belakang tata letak utama untuk aktivitas itu sebagai " # 80000000 ". Suka
android:background="#80000000"
Ini sangat cocok untuk saya.
Jika Anda menggunakan AppCompatActivity
kemudian 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 manifest
file Anda dapat menambahkan tema ini ke tag aktivitas seperti ini
android:theme="@style/TransparentCompat"
untuk lebih jelasnya baca artikel ini
Menggunakan Theme.NoDisplay
masih 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 . "
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>
Cukup tambahkan baris berikut ke tag aktivitas di file manifes Anda yang perlu terlihat transparan.
android:theme="@android:style/Theme.Translucent"
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"
<item name="android:windowBackground">@android:color/transparent</item>