Android: Drawable не отображается

у меня есть довольно простой xml-файл, в котором есть кнопка изображения. Изображение отлично отображается в графическом макете xml designer, отлично отображается при запуске сборки разработки, но как только я создаю подписанный файл 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 папка.

5 ответов


похоже, что это ошибка с android, где иногда первое изображение в папке drawable не отображается. Добавлено фиктивное изображение под названием aaaa.png в папку drawable и проблема была решена. Нашел ответ здесь: ImageButton не отображает конкретный drawable


имел ту же проблему и решил ее, удалив все специальные символы. В моем случае это были тире ' - ' в имени файла:

background-720.png => background.png.


попробуйте поместить изображение в папку drawable-hdpi и drawable-mdpi в зависимости от того , на каком устройстве вы запускаете приложение, изображение ищется в этих папках...

но ввод в drawable означает, что изображение должно быть доступно везде, но что-то (зависит от ваших настроек манифеста) это не может быть правдой, я имею в виду, что вы можете включить режим совместимости.

также вы можете попробовать динамически во время выполнения, чтобы установить изображение в вид

iv.setImageResource(R.drawable.somethig);

моя ситуация была странная.Все было правильно до интеграции FireBase Crash report в мое приложение.

Я только что добавил compile 'com.google.firebase:firebase-crash:11.0.1' & DrawableLeft исчез .Когда я прошел через xml, заметил предупреждение (в строке ниже).

так android:drawableStart & проблема ушла.

все еще мне интересно об отношении сообщения о крушении FireBase к тому же.

использование влево/вправо вместо атрибутов начала/конца с помощью Gravity#LEFT и Gravity#RIGHT может привести к проблемам при отображении макета в локали, где текст течет справа налево. Используйте Gravity#START и Гравитация#конец вместо этого.

аналогично, в атрибутах гравитации XML и layout_gravity используйте start а не слева. Для атрибутов XML, таких как paddingLeft и layout_marginLeft, используйте paddingStart и layout_marginStart.

Примечание: Если ваша minSdkVersion меньше 17, вы должны добавить как старые левые / правые атрибуты, а также новые атрибуты start/right. На более старых платформах, где RTL не поддерживается и начало / право атрибуты неизвестны и поэтому игнорируются, вам нужен более старый левый / правый атрибуты.

существует отдельная проверка корпии, которая ловит этот тип ошибки. (Примечание: Для гравитации#LEFT и гравитации#START вы можете использовать эти константы даже при таргетинге на более старые платформы, потому что стартовая битовая маска надмножество левой битовой маски. Поэтому вы можете использовать gravity= " start" а не гравитация="влево" | "пуск".)


проверьте размер изображения. Если вы используете неоправданно большой актив при фактическом развертывании, он может просто не отображаться, несмотря на правильность в конструкторе.