可绘制未显示

问题描述 投票:0回答:9

我有一个相当简单的 xml 文件,其中有一个图像按钮。该图像在图形布局 xml 设计器上显示良好,当我运行开发构建时显示良好,但一旦我创建签名的 apk 文件并运行它,图像就不再显示。这只是一个空按钮。我想不出原因,有什么想法吗? xml 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/navigation_root"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/navigation_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="TextView"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <SeekBar
        android:id="@+id/navigation_seekbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_weight="1"
        android:padding="5dp" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp" >

        <ImageButton
            android:id="@+id/part_select_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/chapter_select" />

        <Button
            android:id="@+id/navigation_ok_button"
            android:layout_width="75dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="@string/ok" />

        <Button
            android:id="@+id/navigation_cancel_button"
            android:layout_width="75dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="@string/cancel" />
    </LinearLayout>
</LinearLayout>

图像

@drawable/chapter_select
是一个相当小的(41*41)png文件,位于res/drawable文件夹中。

android image button
9个回答
15
投票

这似乎是 Android 的一个错误,有时可绘制文件夹中的第一个图像不会显示。将名为 aaaa.png 的虚拟图像添加到可绘制文件夹中,问题得到解决。在这里找到答案:ImageButton 不显示特定的可绘制对象


12
投票

原因之一是:

如果您在layout.xml中使用

Vector
文件作为
drawableLeft
drawableRight
(或
drawableStart
drawableEnd
),那么您必须使用
androidx.appcompat.widget.AppCompatButton
(以前称为
android.support.v7.widget.AppCompatButton
Button

在我的情况下,

Button
Textview
等简单视图不支持将
Vector
文件作为
drawableLeft
drawableRight
(或
drawableStart
drawableEnd
)。


8
投票

有同样的问题并通过删除所有特殊字符来解决。就我而言,文件名中是破折号“-”:

background-720.png => background.png


2
投票

尝试将图像放入drawable-hdpi和drawable-mdpi文件夹中 取决于您运行应用程序的设备,在这些文件夹中搜索图像...

但是放入drawable意味着图像应该在任何地方都可用,但有时(取决于你的清单设置)这不可能是真的,我的意思是你可以关闭兼容模式。

您也可以在运行时动态尝试将图像设置为视图

iv.setImageResource(R.drawable.somethig);

0
投票

我的情况很奇怪。在将 FireBase 崩溃报告集成到我的应用程序之前,一切都是正确的。

我刚刚添加了编译

'com.google.firebase:firebase-crash:11.0.1'
DrawableLeft消失了。当我浏览xml时,注意到一个警告(如下所示)。

所以添加了

android:drawableStart
并且问题消失了。

我仍然想知道 FireBase 崩溃报告与此之间的关系。

使用左/右而不是开始/结束属性使用 Gravity#LEFT 当布局渲染时,Gravity#RIGHT 可能会导致问题 文本从右向左流动的区域设置。使用重力#START 和 改为重力#END。

同样,在XML的gravity和layout_gravity属性中,使用start 而不是离开。 对于 XML 属性,例如 paddingLeft 和 layout_marginLeft,使用paddingStart和layout_marginStart。

注意:如果您的 minSdkVersion 小于 17,您应该添加 旧的左/右属性以及新的开始/右属性。 在较旧的平台上,不支持 RTL,并且开始/右 属性未知,因此被忽略,您需要旧的 左/右属性。

有一个单独的 lint 检查可以捕获此类错误。 (注意:对于 Gravity#LEFT 和 Gravity#START,您可以使用这些常量 即使针对较旧的平台,因为起始位掩码是 左位掩码的超集。因此,您可以使用重力=“开始” 而不是重力=“左|开始”。)


0
投票

检查您的图像尺寸。如果您在实际部署时使用不必要的大型资源,尽管在设计器中看起来正确,但它可能不会显示。


0
投票

嗯!在我的例子中,设置 MinifyEnabled falseshrinkResources false 现在工作正常。

我正在从drawable获取图像。它在调试版本中工作得很好,但在 apk 发布版本之后,它有时显示空白 ImageView。

minifyEnabled false
shrinkResources true

**

查看截图

**

**Before****After**

希望这可以帮助任何人。


0
投票

我遇到了类似的问题,可绘制的 png 没有显示在 Android Studio 中。删除该文件并将其再次添加到可绘制文件夹中,它对我有用。


0
投票

将此行添加到您的形状

<size android:width="24dp" android:height="24dp"/>
© www.soinside.com 2019 - 2024. All rights reserved.