如何从 Android 的对话框中删除黑色背景。图片显示了问题。
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
如何从 Android 的对话框中删除黑色背景。图片显示了问题。
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
添加此代码
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
或者这个:
dialog.getWindow().setBackgroundDrawableResource(android.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中使用
Dialog dialog = new Dialog(this, R.style.NewDialog);
希望对你有帮助!
我遇到了更简单的问题,我想出的解决方案是应用透明的背景主题。用你的风格写下这些行
<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>
然后添加
android:theme="@style/Theme.Transparent"
在您的主清单文件中,在对话活动的块内。
加上您的对话活动 XML 集中
android:background= "#00000000"
不知何故,撒迦利亚的解决方案对我不起作用,所以我使用下面的主题来解决这个问题......
<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
可以将此主题设置为对话框,如下所示
final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme);
享受!!
如果你想破坏对话框的深色背景,使用这个
dialog.getWindow().setDimAmount(0);
您可以使用:
setBackgroundDrawable(null);
方法。以下是文档:
/**
* 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
*/
对话框弹出填充默认黑色背景颜色或主题颜色,因此您需要将TRANSPARENT
背景设置为对话框。试试下面的代码: -
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();
我在所有现有答案中发现的一个问题是没有保留边距。这是因为它们都用纯色覆盖了android:windowBackground
负责边距的属性。但是,我在 Android SDK 中进行了一些挖掘,发现默认的窗口背景可绘制,并对其进行了一些修改以允许透明对话框。
首先,将 /platforms/android-22/data/res/drawable/dialog_background_material.xml 复制到您的项目中。或者,只需将这些行复制到一个新文件中:
<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>
注意android:color
设置为?attr/colorBackground
。这是您看到的默认纯灰色/白色。要让自定义样式中定义的颜色android:background
透明并显示透明度,我们所要做的就是更改?attr/colorBackground
为@android:color/transparent
. 现在它看起来像这样:
<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>
之后,转到您的主题并添加以下内容:
<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>
确保替换newly_created_background_name
为您刚刚创建的可绘制文件的实际名称,并替换some_transparent_color
为所需的透明背景。
之后,我们需要做的就是设置主题。创建时使用它AlertDialog.Builder
:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
然后像往常一样构建、创建和显示对话框!
注意:不要使用生成器来改变背景。
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
改成
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 时,它没有提供getWindow()
选项。
在你的代码中试试这个:
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
它肯定会工作......在我的情况下......!我的朋友
与 zGnep 相同的解决方案,但使用 xml:
android:background="@null"
这就是我为使用 AlertDialog 实现半透明所做的。
创建了自定义样式:
<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="android:colorBackground">#32FFFFFF</item>
</style>
然后使用以下命令创建对话框:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();
使用此代码,它适用于我:
Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
dialog.show();
您可以使用(可选)
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
我建议创建一个扩展函数。就像是
extensions.kt
import android.app.Dialog
fun Dialog.setTransparentBackground() {
window?.setBackgroundDrawableResource(android.R.color.transparent)
}
并在任何对话框中使用它
dialog.setTransparentBackground()
有一些有趣的编程...
在我的情况下,解决方案是这样的:
dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
此外,在自定义对话框的 XML 中:
android:alpha="0.8"
如果您扩展了DialogFrament
课程,您可以使用以下方式设置主题:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
然后在您的 styles.xml 文件中制作自定义主题(请参阅@LongLv 的参数答案)
<item name="android:windowCloseOnTouchOutside">true</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>
只需将 false 更改为 true 即可
<item name="android:backgroundDimEnabled">true</item>
它会使你的背景变暗。
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
这是我的方法,你可以试试!
对于使用带有自定义类的自定义对话框的任何人,您需要更改类中的透明度,在 onCreate() 中添加以下行:
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(ctx, android.R.color.transparent)));
确保R.layout.themechanger
没有背景颜色,因为默认情况下对话框具有默认背景颜色。
您还需要添加dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
最后
<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>
如果您使用Kotlin,此代码可以帮助您:
Objects.requireNonNull(dialog.window)
?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
就我而言,没有任何方法可以应用透明背景。
只有我在我的对话框 onStart() 中使用过:
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
但它没有任何效果。我检查了styles.xml,没有与我的问题相关联。
最后,当我检查我的对话框是如何创建的时,我发现导航组件在我请求对话框片段时正在创建对话框。
在 navgraph.xml 的 XML 中,我将对话框片段定义为片段,因此,它被创建为片段而不是对话框。将该片段更改为对话框使一切都到位。
顺便说一句:您不能在导航编辑器的 GUI 中从片段修改为对话框。您应该手动更改代码。
这可能是对对话框的某些影响未反映在运行时的原因之一。
Kotlin 创建具有透明背景的对话框的方法:
Dialog(activity!!, R.style.LoadingIndicatorDialogStyle)
.apply {
// requestWindowFeature(Window.FEATURE_NO_TITLE)
setCancelable(true)
setContentView(R.layout.define_your_custom_view_id_here)
//access your custom view buttons/editText like below.z
val createBt = findViewById<TextView>(R.id.clipboard_create_project)
val cancelBt = findViewById<TextView>(R.id.clipboard_cancel_project)
val clipboard_et = findViewById<TextView>(R.id.clipboard_et)
val manualOption =
findViewById<TextView>(R.id.clipboard_manual_add_project_option)
//if you want to perform any operation on the button do like this
createBt.setOnClickListener {
//handle your button click here
val enteredData = clipboard_et.text.toString()
if (enteredData.isEmpty()) {
Utils.toast("Enter project details")
} else {
navigateToAddProject(enteredData, true)
dismiss()
}
}
cancelBt.setOnClickListener {
dismiss()
}
manualOption.setOnClickListener {
navigateToAddProject("", false)
dismiss()
}
show()
}
在 style.xml 中创建 LoadingIndicatorDialogStyle,如下所示:
<style name="LoadingIndicatorDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<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:statusBarColor">@color/black_transperant</item>
<item name="android:layout_gravity">center</item>
<item name="android:background">@android:color/transparent</item>
<!--<item name="android:windowAnimationStyle">@style/MaterialDialogSheetAnimation</item>-->
</style>