Android'de nasıl şeffaf bir Etkinlik oluşturabilirim?


Yanıtlar:


1393

res/values/styles.xmlDosyanı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 #00000000koyduğum renk değeridir res/values/color.xml. Daha @android:color/transparentsonraki 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>

13
Kullandım<item name="android:windowBackground">@android:color/transparent</item>
Birisi

33
Harika! Sadece bir gelişme: parent = "@ android: style / Theme.Dialog" kullanırsanız, bir iletişim kutusunun tam davranışını elde edersiniz. Bu, içeri / dışarı kaydırmak yerine içeri / dışarı kayma anlamına gelir (bir etkinlik gibi)
PakitoV

73
@Emilio'nun belirttiği gibi, bu, esas android:windowIsFloatingolarak 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)
aromero

38
Tam ekran ve şeffaf bir etkinliğe sahip olmak için <item name = "android: windowIsFloating"> true </item> öğesini kaldırdım
Kiem Duong

12
Etkinliğimden türetildi AppCompatActivity. Yani parent="android:Theme"Uygulamamı çöküyordu. Sadece kaldırdım ve çekicilik gibi çalıştı. Teşekkürler!
Atul

193

Bu böyle devam ediyor:

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

3
Alex'i manifest'teki etkinlik bildiriminize gönderdiği gibi temayı ekleyin - bu bit android: theme = "@ android: style / Theme.Translucent.NoTitleBar, her Etkinlik için Yarı Saydam temayı atayabilirsiniz
Donal Rafferty

12
@UMMA: Bir soru işareti kullanmak genellikle yeterlidir. Birden fazla soru işareti, sorularınızı yanıtlamak için zaman ayıran kişilerin yüzlerine atladığınızı düşünmelerini sağlar.
Matthias

7
@Matthias genellikle vardır, çünkü patronları kendilerine atlıyor
Reno

16
@ user1129443: 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
Nam Trung

4
Bu yöntem, etkinlik çalışırken UI'yi kilitler, ancak yarı saydam olarak ayarlandığından, hiçbir şey yapamaz. Bu UI kilitlemesinden kaçınmanın bir yolu var.
Akhil Latta

126

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>

1
Bu Faaliyette gerçekten bir şey görüntülemeyi planlıyorsanız (bir İletişim Kutusu veya İletişim Kutusu Parçası deyin), her şeyin Koyu temalı olduğunu fark edeceksiniz. Dolayısıyla temanızın devralmasını isteyebilirsiniz Theme.Appcompat.Light.NoActionBar.
tir38

1
Benim durumumda siyah arka plan gösteriyor.Ana teması başka bir şey ayarladım ama belirli bir etkinlikte belirtildiği gibi temayı değiştiriyorum.
Abdul Waheed

4
: "Arka plan android" Ben kaldırdığınızda büyük İşleri
Oded Breiner

2
Ben backgroundtercih yarı saydam renk kaldırmak ve koymak istiyorum düşünüyorumwindowBackground
hmac

Etkinliğiniz @ gnobal'ın cevabının aksine AppCompatActivity kullanıyorsa yanıt bu olmalıdır.
AeroEchelon

37

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.


En iyi yol. Teşekkürler
Peter

5
Bu etkinlikle birlikte bir Theme.AppCompat teması (veya torunu) kullanmanız gerekir.
Puni

28

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" />

16

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:

colors.xml

<?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.


16

2.3.3'te sadece android:theme="@android:style/Theme.Translucent" manifestteki etkinlik etiketini .

Alt sürümleri bilmiyorum ...


Bu 2.2 için de iyi çalışıyor. Sadece bir liste görünümü ile basit bir etkinlik oluşturdum ve son etkinliğin üzerinde yüzer.
slott

API 1'de eklendi, bu bir sorun değil :)
xmen

6
Bunu AppCompatActivitykullanıyorsanız kullanmayın.
zackygaurav

7.0 da çalışır böylece iyi bir yaklaşım. @Android: style / Theme.Translucent.NoTitleBar.Fullscreen
Sandeep

16

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.


9

Gelen onCreate fonksiyonu aşağıdaki setContentView , bu satırı ekleyin:

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

23
Herhangi bir nedenle arka planı tamamen SİYAH yapar.
Subin Sebastian

Benim de @SubinSebastian, kimse buna bir çözüm buldu mu?
finnmglas

8

Etkinlik arka plan resminin şeffaf olmasına izin verin. Veya temayı XML dosyasına ekleyin:

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

7

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));.


6

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.


2
Tamamen SİYAH için arka plan yapar
ucMedia

5

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" />

2
2018 itibariyle, bu en iyi cevap
Geek Guy

bana API 28 ile emülatörde siyah bir arka plan verdi
Birisi

Ben android 8.0 oryantasyon ayarı ile ilgili çökme düzeltmek için denedim ama hala IllegalStateException alıyorum: Sadece tam ekran opak etkinlikler yönlendirme isteği
Rahul Sahni

3

Sadece iki şey yaptım ve bu benim aktivitemi şeffaf hale getirdi. Aşağıda.

  1. Manifest dosyasında etkinlik koduna aşağıdaki kodu ekledim .

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


3

Eğer kullanıyorsanız AppCompatActivityo 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 manifestdosyanın Böyle etkinliği etiketi için bu temayı ekleyebilirsiniz

android:theme="@style/TransparentCompat"

daha fazla ayrıntı için bu makaleyi okuyun


2

Yarı Saydam temayı atayın

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

2

İki yol var:

  1. Theme kullanma.
  2. Theme.Translucent.NoTitleBar kullanma

Kullanmaya Theme.NoDisplaydevam 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


1

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>

0

Manifest dosyanızdaki şeffaf görünmesi gereken etkinlik etiketine aşağıdaki satırı eklemeniz yeterlidir.

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

0

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"


0

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 .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.