如何从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);
当前回答
如果你扩展了DialogFrament类,你可以设置主题:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
然后在styles.xml文件中创建自定义主题(参见@LongLv的参数回答)
不要忘记添加<item name="android:windowCloseOnTouchOutside">true</item>如果你想让用户在对话框外触摸时关闭对话框。
其他回答
按样式设置这些样式代码
<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>
它会使你的背景变暗。
在Kotlin中,你可以使用以下代码:
val dialog = Dialog(context)
dialog.window?.decorView?.background = null
确保r.b ayout.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>
我在所有现有答案中发现的一个问题是,边际没有得到保留。这是因为它们都覆盖了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>
确保用刚刚创建的可绘制文件的实际名称替换新婚created_background_name,并用所需的透明背景替换some_transparent_color。
之后我们要做的就是确定主题。在创建AlertDialog时使用此选项。建造者:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
然后像往常一样构建、创建和显示对话框!
TL,博士;你只需要两件事,首先在你的风格做一些像这样的事情:
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
其次,100%确保上述样式应用到对话框中(可能通过传递给构造函数)。
完整的示例
<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);
希望对你有所帮助!