Yanıtlar:
res/values/styles.xml
Dosyanıza aşağıdaki stili ekleyin (eğer yoksa, oluşturun.) İşte tam bir dosya:
<?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>
(Değer @color/transparent
, dosyaya #00000000
koyduğum renk değeridir res/values/color.xml
. Daha @android:color/transparent
sonraki Android sürümlerinde de kullanabilirsiniz .)
Ardından stili etkinliğinize uygulayın, örneğin:
<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
android:windowIsFloating
olarak true değerine ayarlandığından bir iletişim kutusu gibi davranacaktır . Normal bir etkinlik gibi davranmak için bu özelliği kaldırın (bu durumda eşleşecek android:style/Theme.Translucent.NoTitleBar
)
AppCompatActivity
. Yani parent="android:Theme"
Uygulamamı çöküyordu. Sadece kaldırdım ve çekicilik gibi çalıştı. Teşekkürler!
Bu böyle devam ediyor:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
50% black should be #7f000000
. Her bileşen (A, R, G, B) 'den değer alabilir 0-255
. 50% of 255 = 127. 127 in Hex = 7F
Şeffaflık (opaklık) nasıl hesaplanır
Styles.xml dosyasında:
<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>
AndroidManifest.xml dosyasında:
<activity
android:name=".WhateverNameOfTheActivityIs"
android:theme="@style/Theme.AppCompat.Translucent">
...
</activity>
Theme.Appcompat.Light.NoActionBar
.
background
tercih yarı saydam renk kaldırmak ve koymak istiyorum düşünüyorumwindowBackground
Manifest'te faaliyetinizi şöyle beyan edin:
<activity
android:name=".yourActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
Ve düzeninize saydam bir arka plan ekleyin.
Saydam temayı, projenizin Android bildirim dosyasında saydamlaştırmak istediğiniz etkinliğe atayın:
<activity
android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
Yeni bir Android geliştiricisi olduğum için bunu biraz eklemek istedim. Kabul edilen cevap harika, ama bazı sorunlarla karşılaştım. Renkleri colours.xml dosyasına nasıl ekleyeceğimi bilmiyordum. İşte nasıl yapılması gerekiyor:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="class_zero_background">#7f040000</color>
<color name="transparent">#00000000</color>
</resources>
Benim orijinal colors.xml dosyasında "drawable" etiketi vardı:
<drawable name="class_zero_background">#7f040000</drawable>
Bu yüzden bunu renk için de yaptım, ancak "@ color /" referansının XML'deki "color" etiketini aramak anlamına geldiğini anlamadım. Başkalarına yardım etmek için de bundan bahsetmem gerektiğini düşündüm.
2.3.3'te sadece android:theme="@android:style/Theme.Translucent"
manifestteki etkinlik etiketini .
Alt sürümleri bilmiyorum ...
AppCompatActivity
kullanıyorsanız kullanmayın.
Benim durumumda, bazı koşullara göre java çalışma zamanında tema ayarlamak zorunda. Bu yüzden tarzda bir tema oluşturdum (diğer cevaplara benzer):
<?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>
Sonra Java benim etkinliğim için uyguladı:
@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);
}
Burada önemli bir noktayı hatırlayın : setTheme()
İşlevi daha önce çağırmalısınız super.onCreate(savedInstanceState);
. Bu noktayı kaçırdım ve temamın çalışma zamanında neden yansımadığını düşünerek 2 saat takıldım.
Gelen onCreate fonksiyonu aşağıdaki setContentView , bu satırı ekleyin:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Bulduğum en kolay yol, etkinliğin temasını AndroidManifest'te ayarlamaktır android:theme="@android:style/Theme.Holo.Dialog"
.
Ardından etkinliğin onCreate yönteminde çağırın getWindow().setBackgroundDrawable(new ColorDrawable(0));
.
Diyalog etkinliği için şunu kullanıyorum:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
Ancak etkinlikteki ana Görüşünüzü görünmez olarak ayarlamanız gerekir. Aksi takdirde arka plan görünmez olurken içindeki tüm görünümler görünür olur.
yukarıdaki cevaplara ek olarak:
Android Oreo ile ilgili kazadan kaçının
<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" />
Sadece iki şey yaptım ve bu benim aktivitemi şeffaf hale getirdi. Aşağıda.
Manifest dosyasında etkinlik koduna aşağıdaki kodu ekledim .
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
Ve ben sadece bu etkinliğin ana düzeninin arka planını " # 80000000 " olarak ayarladım . Sevmek
android:background="#80000000"
Benim için mükemmel çalışıyor.
Eğer kullanıyorsanız AppCompatActivity
o zaman bu yazıstyles.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>
Gelen manifest
dosyanın Böyle etkinliği etiketi için bu temayı ekleyebilirsiniz
android:theme="@style/TransparentCompat"
daha fazla ayrıntı için bu makaleyi okuyun
Kullanmaya Theme.NoDisplay
devam edecek… ancak yalnızca eski Android cihazlarda çalışacak. Android 6.0 ve daha yüksek, uğramadan Theme.NoDisplay kullanarak finish()
içinde onCreate() (or, technically, before onResume())
olacak çökmesine uygulamanızı. Bu nedenle, bu sınırlamadan muzdarip olmayan kullanım önerisi . ”Theme.Translucent.NoTitleBar
Not 1: Çekilebilir klasörde test.xml dosyasını oluşturun ve aşağıdaki kodu kopyalayın
<?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>
// not: köşeleri ve şekli şartının olarak.
// Not 2: xml oluştur:
<?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>
Manifest dosyanızdaki şeffaf görünmesi gereken etkinlik etiketine aşağıdaki satırı eklemeniz yeterlidir.
android:theme="@android:style/Theme.Translucent"
Tüm bu cevaplar kafa karıştırıcı olabilir, Şeffaf etkinlik ile Yok kullanıcı arayüzü etkinliği arasında bir fark vardır.
Bunu kullanarak:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
Etkinliği şeffaf hale getirir, ancak kullanıcı arayüzünü engeller.
Hiçbiri kullanıcı arayüzü etkinliği kullanmak istemiyorsanız:
android:theme="@android:style/Theme.NoDisplay"
Kaldırabilirsiniz setContentView(R.layout.mLayout)
Etkinliğinizden ve temayı olarak ayarlayabilirsiniz android:theme="@style/AppTheme.Transparent"
. Daha fazla ayrıntı için bu bağlantıyı kontrol edin .
<item name="android:windowBackground">@android:color/transparent</item>