Android'deki bir iletişim kutusundan siyah arka planı nasıl kaldırabilirim? Resim sorunu gösteriyor.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Android'deki bir iletişim kutusundan siyah arka planı nasıl kaldırabilirim? Resim sorunu gösteriyor.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Yanıtlar:
Bu kodu ekle
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Ya da bunun yerine:
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.getWindow().setBackgroundDrawable(new ColorDrawableResource(R.color.transparent));
dialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
<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!
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"
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!!
Ş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
*/
İletişim kutusu açılır Varsayılan siyah arka plan rengini veya tema rengini doldurun, böylece TRANSPARENT
arka 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();
iletişim kutusunun koyu arka planını yok etmek istiyorsanız bunu kullanın
dialog.getWindow().setDimAmount(0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
Mevcut tüm cevaplarda bulduğum bir konu, marjların korunmadığı. Bunun nedeni, hepsinin android:windowBackground
kenar 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:color
ayarlanmış 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/colorBackground
iç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_name
oluşturduğunuz çekilebilir dosyanın gerçek adıyla değiştirdiğinizden some_transparent_color
ve 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!
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();
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.
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.
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
bu benim yolum, deneyebilirsiniz!
DialogFrament
Sı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 .
Ö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);
Emin olmak R.layout.themechanger
Varsayı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>