Android'de şeffaf arka planlı iletişim kutusu


247

Android'deki bir iletişim kutusundan siyah arka planı nasıl kaldırabilirim? Resim sorunu gösteriyor.

resim açıklamasını buraya girin

final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger); 

lütfen iletişim kutusu oluşturma kodunu gösterin
MByD

bu durum bu iki kod satırında da işe
yarar

Burada en iyi yanıtı bulun link açıklamasını
Collins Ushi

Yanıtlar:


697

Bu kodu ekle

 dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

Ya da bunun yerine:

dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

16
Teşekkür ederim! Ancak, kullanmayı tercih ediyorumdialog.getWindow().setBackgroundDrawable(new ColorDrawableResource(R.color.transparent));
RileyE

6
bu çözüm yardımcı olur. sorun, genişlik ekrana sığacak. normal iletişim kutusu ile karşılaştırıldığında dolgu olmaz. Ancak Android 4.1 varsayılan olarak ele alır
Basavaraj Hampali

1
ALert Dialog kullanıyorsam ne olacak ??
Ahmad Arslan

1
Bir DialogFragment içinde iseniz, getDialog (). GetWindow () ... öğesini çağırmanız yeterlidir (görünüm oluşturulduktan sonra, örneğin onViewCreated geri aramanızda).
akohout

14
dialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
Peter Zhao

82
<style name="NewDialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:background">@android:color/transparent</item>
</style>

java'da kullan

Dialog dialog = new Dialog(this, R.style.NewDialog);

Umarım yardım ederim!


Çalışacak ama u şeffaf alan diyalog tıklamazsanız bu nasıl ele?
John

2
@John Şunları kullanabilirsiniz: dialog.setCanceledOnTouchOutside (true);
LongLv

Dışarıda dokunduğunuzda varsayılan olarak çıkış yapmak için parent = "Theme.AppCompat.Dialog" kullanabilirsiniz.
Dark Leonhart

31

Daha basit bir sorunla karşılaştım ve bulduğum çözüm şeffaf bir bachground THEME uyguluyordu. Bu satırları stillerinize yazın

    <item name="android:windowBackground">@drawable/blue_searchbuttonpopupbackground</item>
</style>
<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>

Ve sonra ekle

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

ana bildirim dosyanızda, iletişim etkinliği etkinliğinin bloğunun içinde.

Artı iletişim kutusu etkinliği XML kümenizde

 android:background= "#00000000"

2
Veya yalnızca Dialog'un stilini ayarlamak istiyorsanız kullanın: <style name = "Theme.Transparent" parent = "@ android: style / Theme.Dialog">
Roosevelt

16

Her nasılsa Zacharias çözümü benim için çalışmadı, bu yüzden bu sorunu çözmek için aşağıdaki temayı kullandım ...

<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
</style>

Bu temayı aşağıdaki gibi iletişim kutusuna ayarlayabilirsiniz

final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme); 

Zevk almak!!


1
<item name = "android: windowBackground"> ​​@ renk / şeffaf </item> Bu satır aşağıdaki satır ile değiştirilmelidir, aksi takdirde colors.xml dosyasında saydam bir değer eklemeniz gerekir. <item name = "android: windowBackground"> ​​@ android: renkli / şeffaf </item>
AkhilGite 3:16

12

Şunları kullanabilirsiniz:

setBackgroundDrawable(null);

Ve aşağıdaki doktor:

  /**
    * Set the background to a given Drawable, or remove the background. If the
    * background has padding, this View's padding is set to the background's
    * padding. However, when a background is removed, this View's padding isn't
    * touched. If setting the padding is desired, please use
    * {@link #setPadding(int, int, int, int)}.
    *
    * @param d The Drawable to use as the background, or null to remove the
    *        background
    */

Bu, ancak iletişim kutusunu genişlettiğinizde hızlı bir çözüm değil, iyi bir çözüm olacaktır ....
Programcı

11

İletişim kutusu açılır Varsayılan siyah arka plan rengini veya tema rengini doldurun, böylece TRANSPARENTarka planı İletişim Kutusu'na ayarlamanız gerekir . Aşağıdaki kodu deneyin: -

final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.splash);
dialog.show();

10

iletişim kutusunun koyu arka planını yok etmek istiyorsanız bunu kullanın

dialog.getWindow().setDimAmount(0);

Teşekkür ederim. Aradığım şey bu. Bu harika.
Farruh Habibullaev

1
Bu işi en basit şekilde yapar, teşekkürler! Ancak, uygulamanızın cihazların% 100'ünde çalışmasını istiyorsanız (Minimum SDK sürümünü 15 olarak ayarladım), Android şunları önerir: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
Danny EK van der Kolk

8

Mevcut tüm cevaplarda bulduğum bir konu, marjların korunmadığı. Bunun nedeni, hepsinin android:windowBackgroundkenar boşluklarından sorumlu olan niteliği düz bir renkle geçersiz kılmasıdır. Ancak, Android SDK'da biraz kazma yaptım ve varsayılan pencere arka planını çekilebilir buldum ve şeffaf diyaloglara izin vermek için biraz değiştirdim.

İlk olarak, /platforms/android-22/data/res/drawable/dialog_background_material.xml dosyasını projenize kopyalayın. Veya bu satırları yeni bir dosyaya kopyalayın:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="16dp">
    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="?attr/colorBackground" />
    </shape>
</inset>

Olarak android:colorayarlanmış uyarı?attr/colorBackground . Bu gördüğünüz varsayılan düz gri / beyazdır. Tanımlanan renk izin vermek için android:backgroundözel bir tarzda şeffaf olmaya ve şeffaflık göstermek, yapmamız gereken tüm değişimdir ?attr/colorBackgroundiçin @android:color/transparent. Şimdi şöyle görünecek:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="16dp">
    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="@android:color/transparent" />
    </shape>
</inset>

Bundan sonra temanıza gidin ve ekleyin:

<style name="MyTransparentDialog" parent="@android:style/Theme.Material.Dialog">
    <item name="android:windowBackground">@drawable/newly_created_background_name</item>
    <item name="android:background">@color/some_transparent_color</item>
</style>

Yeni newly_created_background_nameoluşturduğunuz çekilebilir dosyanın gerçek adıyla değiştirdiğinizden some_transparent_colorve istediğiniz saydam arka planla değiştirdiğinizden emin olun .

Bundan sonra tek yapmamız gereken temayı ayarlamak. Bunu oluştururken kullanınAlertDialog.Builder :

    AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);

Sonra iletişim kutusunu her zamanki gibi derleyin, oluşturun ve gösterin!


Bunu AppCompat AlertDialog ile takip ettim ama android: background kullanmak yerine, doğrudan drawable'ın android: color kendisi ile şeffaf bir renk ayarlamayı seçtim. Bunu yapmak için gerekli, çünkü android: arka plan bir şekilde hala bazı alanları hala şeffaf bıraktı. Ancak tekniği paylaştığınız için teşekkürler!
Dileep PG

3

ZGnep ile aynı çözüm ancak xml kullanıyor:

android:background="@null"

3

Bunu kodunuzda deneyin:

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

kesinlikle çalışacak ... benim durumumda ...! arkadaşım


3

AlertDialog ile yarı saydamlık elde etmek için yaptığım şey bu.

Özel bir stil oluşturuldu:

<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
    <item name="android:colorBackground">#32FFFFFF</item>
</style>

Ve sonra aşağıdakileri içeren iletişim kutusunu oluşturun:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();

1

Benim durumumda çözüm şöyle çalışır:

dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

Ve ayrıca Xml özel iletişim kutusunda:

android:alpha="0.8"

1

benimle çalışır bu kodu kullanın:

    Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
    dialog.show();

2
Ben niyetinize biraz açıklama eklemek OP ve daha fazla ziyaretçi için daha yararlı olacağını düşünüyorum.
Muhabir

1

Bu stil kodunu stile ayarlama

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

Ve sadece false değerini true satırının altına değiştir

<item name="android:backgroundDimEnabled">true</item>

Arka planınızı karartır.


1

Dikkat: Arka planı değiştirmek için oluşturucu kullanmayın.

Dialog dialog = new Dialog.Builder(MainActivity.this)
                                .setView(view)
                                .create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

değişmek

Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();

Dialog.builder kullanırken, içinde getWindow()seçenek vermiyor.


0
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

bu benim yolum, deneyebilirsiniz!


1
Bu artık kullanımdan kaldırılmıştır: @deprecated Blurring artık desteklenmemektedir.
arberg

0

DialogFramentSınıfı genişletmeniz durumunda temayı aşağıdakilerle ayarlayabilirsiniz:

setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);

Ardından styles.xml dosyanızda özel temayı oluşturun (@ LongLv'nin parametreler için cevabına bakın)

<item name="android:windowCloseOnTouchOutside">true</item>Kullanıcı iletişim kutusunun dışına dokunursa iletişim kutusunun kapanmasını istiyorsanız eklemeyi unutmayın .


0

Özel bir sınıfla özel bir iletişim kutusu kullanan herkes için sınıftaki saydamlığı değiştirmeniz gerekir, bu satırı onCreate () öğesine ekleyin:

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

0

dialog.getWindow (). setBackgroundDrawable (yeni ColorDrawable (ContextCompat.getColor (ctx, android.R.color.transparent)));


0

Emin olmak R.layout.themechangerVarsayılan olarak iletişim kutusunun varsayılan arka plan rengi olduğundan arka plan rengi olmadığından .

Ayrıca eklemeniz gerekir dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));

Ve sonunda

<style name="TransparentDialog">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
</style>
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.