【问题标题】:Dialog displaying white background when using a png with transparency as a background使用具有透明度的 png 作为背景时显示白色背景的对话框
【发布时间】:2018-08-09 12:06:49
【问题描述】:

我用 Gimp 为 Dialog 创建了一个背景,它是一个具有透明度和透明背景的 PNG。如果我在 ImageView 上显示它很好,而且背景是透明的。

<ImageView
    android:src="@drawable/test"

但如果我将它显示为我的对话框的 LinearLayout 的背景,那么,将显示白色背景而不是图像的透明度(alpha 通道)。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/test"

final Dialog dialog = new Dialog(context);
        dialog.setContentView(R.layout.xmldialog);

这是 PNG:

当我用作对话框的线性布局的背景时,应该做些什么来获得 alpha 通道而不是我创建的图像下方的白色背景?我确定这是对话框的问题。必须将某些内容设置为 true。

【问题讨论】:

    标签: android android-layout png transparency android-dialog


    【解决方案1】:

    两个十六进制字符可以附加到任何十六进制颜色代码。 8 位十六进制颜色代码中的前两个字符表示其在 Android 中的不透明度。

    这两个十六进制字符的范围可以从 00 到 FF。例如,

    ->正常不透明黑色十六进制-“#000000”

    -> 完全透明 - “#00000000”

    -> 完全不透明 - “#FF000000”

    -> 50% 透明 - “#7F000000”

    通过这种方式,您可以将任何颜色更改为任何级别的透明度。

    从百分比中查找十六进制前缀:

    将百分比数除以 100 再乘以 255 得到十进制值。将十进制转换为十六进制。

    例如,对于 50%,50/100 * 255 = 127。使用链接我们得到十六进制值 7F。

    希望这有助于您了解为任何视图设置透明背景。

    【讨论】:

      【解决方案2】:

      尝试将它设置为png作为对话框setBackgroundDrawable()的背景。

        dialog.getWindow().setBackgroundDrawable(ContextCompat.getDrawable(this,R.drawable.ic_launcher));
      

      如果您将背景设置为根布局。然后将背景设置为透明。

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

      并让你的根布局保持背景。

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:background="@drawable/test"
      

      确保使用的 png 没有在边框上留下任何彩色填充。

      您还可以设置具有指定主题的对话框背景。下面是一个例子。

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

      在 Dialog 的构造函数中使用这个主题。

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

      根据需要更改主题并注意使用的属性。

      【讨论】:

      • 我没有测试过。所以让我知道输出。
      • 这必须通过 XML 代码实现,而不是在运行时通过 java 代码实现,而且您的解决方案也不起作用
      • 好吧,看来你已经试过了。你能发布输出对话框图像吗?这是你目前得到的。
      • 它是一样的,但我贴的 png 后面有一个白色方块
      • 天啊,如果我以这种方式使用它(没有你的“this”),你的 wolution 会起作用: dialog.getWindow().setBackgroundDrawable(context.getDrawable(R.drawable.test));问题是它需要 API 21,而我的应用程序用于较低的 api 设备(至少 14 个),我更喜欢用 XML 代码解决这个问题,而不是在运行时这样做。为什么这行得通,而不是我使用的 xml 参数?
      猜你喜欢
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 2013-09-26
      • 2015-06-22
      • 1970-01-01
      • 2023-04-10
      • 2015-10-21
      • 1970-01-01
      相关资源
      最近更新 更多