我有一个相当简单的 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 的一个错误,有时可绘制文件夹中的第一个图像不会显示。将名为 aaaa.png 的虚拟图像添加到可绘制文件夹中,问题得到解决。在这里找到答案:ImageButton 不显示特定的可绘制对象
原因之一是:
如果您在layout.xml中使用
Vector
文件作为drawableLeft
或drawableRight
(或drawableStart
或drawableEnd
),那么您必须使用androidx.appcompat.widget.AppCompatButton
(以前称为android.support.v7.widget.AppCompatButton
) Button
。
在我的情况下,
Button
或Textview
等简单视图不支持将Vector
文件作为drawableLeft
或drawableRight
(或drawableStart
或drawableEnd
)。
有同样的问题并通过删除所有特殊字符来解决。就我而言,文件名中是破折号“-”:
background-720.png => background.png
。
尝试将图像放入drawable-hdpi和drawable-mdpi文件夹中 取决于您运行应用程序的设备,在这些文件夹中搜索图像...
但是放入drawable意味着图像应该在任何地方都可用,但有时(取决于你的清单设置)这不可能是真的,我的意思是你可以关闭兼容模式。
您也可以在运行时动态尝试将图像设置为视图
iv.setImageResource(R.drawable.somethig);
我的情况很奇怪。在将 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,您可以使用这些常量 即使针对较旧的平台,因为起始位掩码是 左位掩码的超集。因此,您可以使用重力=“开始” 而不是重力=“左|开始”。)
检查您的图像尺寸。如果您在实际部署时使用不必要的大型资源,尽管在设计器中看起来正确,但它可能不会显示。
我遇到了类似的问题,可绘制的 png 没有显示在 Android Studio 中。删除该文件并将其再次添加到可绘制文件夹中,它对我有用。
将此行添加到您的形状:
<size android:width="24dp" android:height="24dp"/>