我有一个相当简单的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" >
</TextView>
<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" >
</SeekBar>
<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" >
</ImageButton>
<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>
<Button
android:id="@+id/navigation_cancel_button"
android:layout_width="75dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/cancel" >
</Button>
</LinearLayout>
图片@drawable/chapter_select
是一个相当小的(41 * 41)png文件,位于res / drawable文件夹中。
答案 0 :(得分:13)
似乎这是android的一个错误,有时可绘制文件夹中的第一个图像不显示。在drawable文件夹中添加了一个名为aaaa.png的虚拟图像,问题解决了。在这里找到答案:ImageButton does not display a particular drawable
答案 1 :(得分:5)
有同样的问题并通过删除所有特殊字符来解决它。就我而言,它是破折号 - &#39; - &#39;在文件名中:
{{1}}。
答案 2 :(得分:2)
尝试将图像放在drawable-hdpi和drawable-mdpi文件夹中 取决于你运行app的设备,在这些文件夹中搜索图像......
但是放入drawable意味着图像应该随处可用,但有些时候(取决于你的清单设置)这可能不是真的,我的意思是你可以改变兼容模式。
您也可以在运行时尝试使用dinamically将图像设置为视图
iv.setImageResource(R.drawable.somethig);
答案 3 :(得分:0)
我的情况很奇怪。在将FireBase Crash报告集成到我的应用程序之前,一切正常。
我刚刚添加了编译'com.google.firebase:firebase-crash:11.0.1'
&amp; DrawableLeft消失。当我浏览xml时,发现了一个警告(如下所示)。
添加了android:drawableStart
&amp;问题消失了。
我仍然想知道FireBase Crash报告的关系。
使用左/右而不是开始/结束属性使用重力#LEFT 渲染布局时,Gravity#RIGHT会导致问题 文本从右向左流动的语言环境。使用Gravity#START和 重力#END代替。
同样,在XML gravity和layout_gravity属性中,使用start 而不是离开。对于诸如paddingLeft和的XML属性 layout_marginLeft,使用paddingStart和layout_marginStart。
注意:如果你的minSdkVersion小于17,你应该添加两个 较旧的左/右属性以及新的开始/右属性。 在较旧的平台上,不支持RTL和开始/右侧 属性是未知的,因此被忽略,你需要更旧 左/右属性。
有一个单独的lint检查可以捕获这种类型的错误。 (注意:对于Gravity#LEFT和Gravity#START,您可以使用这些常量 即使是针对较旧的平台,因为起始位掩码是一个 左位掩码的超集。因此,您可以使用gravity =“start” 而不是gravity =“left | start”。)
答案 4 :(得分:0)
检查图像大小。如果您在实际部署时使用了不必要的大型资产,尽管设计师看起来不正确,但可能无法显示。
答案 5 :(得分:0)
好!就我而言,设置 MinifyEnabled false 和 shrinkResources false 现在可以正常工作。
我正在从可绘制图像中获取图像。它在调试版本中工作得很好,但是在apk发行版之后,它有时显示为空白的ImageView。
minifyEnabled false
shrinkResources true
**
查看屏幕截图
**
希望这对任何人都有帮助。
答案 6 :(得分:0)
原因之一是
如果您将Vector
文件用作可绘制的左侧或右侧,则必须使用。
android.support.v7.widget.AppCompatButton
代替
按钮
在我看来,像Button,Textview
这样的简单视图不支持将Vector
文件作为Drawable left right