2011-09-19 42 views
7

Tengo un archivo XML bastante simple que tiene un botón de imagen. La imagen aparece bien en el diseñador gráfico Layout xml, se muestra bien cuando ejecuto una compilación de desarrollo, pero tan pronto como creo el archivo apk firmado y lo ejecuto, la imagen ya no se muestra. Es solo un botón vacío. No puedo pensar en una razón por qué, alguna idea? El archivo XML es el siguiente:Android: Drawable no aparece

<?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> 

La imagen @drawable/chapter_select es bastante pequeña (41 * 41) PNG que se encuentra en la carpeta res/estirable.

Respuesta

12

parece que esto es un error por el androide, donde a veces la primera imagen de la carpeta dibujable no aparece. Se agregó una imagen ficticia llamada aaaa.png a la carpeta dibujable y se solucionó el problema. Encontré la respuesta aquí: ImageButton does not display a particular drawable

2

tratar de poner la imagen en dibujable-IPAP y estirable-mdpi carpeta depende del dispositivo que se ejecuta la aplicación, la imagen se busca en estas carpetas ...

Pero que pone en medios dibujable que la imagen debería estar disponible en todas partes, pero a veces (depende de la configuración del manifiesto) esto no podría ser cierto, quiero decir que puede cambiar el modo de compatibilidad.

también se puede tratar de forma dinámica en tiempo de ejecución para ajustar la imagen a la vista

iv.setImageResource(R.drawable.somethig); 
+0

No quiero ponerlo en una carpeta de densidad de pantalla específica porque quiero que todos los dispositivos puedan usar la imagen sin hacer copias. Configurar la imagen dinámicamente no cambió nada, aún no aparece en la compilación firmada. Gracias por intentarlo, Luk. – odiggity

2

Tuve el mismo problema y lo resolví eliminando todos los caracteres especiales. En mi caso, fue guiones '-' en el nombre de archivo:

background-720.png => background.png.

0

Mi situación era extraña. Todo fue correcto hasta integrar el informe de bloqueo de FireBase en mi aplicación.

Acabo de añadir compilar 'com.google.firebase:firebase-crash:11.0.1' & DrawableLeft desapareció .Cuando me fui a través del xml, notó una advertencia (En alineados a continuación).

Añadido android:drawableStart & issue gone.

Todavía me pregunto acerca de la relación de los informes de FireBase Crash con el mismo.

Usando/extremo izquierda/derecha en lugar de inicio atributos Uso de la gravedad # IZQUIERDA y gravedad # adecuado puede conducir a problemas cuando una disposición se representa en lugares donde el texto fluye de derecha a izquierda. Use Gravity # START y Gravity # END en su lugar.

De forma similar, en los atributos de gravedad XML y layout_gravity, use start en lugar de izquierda. Para atributos XML como paddingLeft y layout_marginLeft, use paddingStart y layout_marginStart.

NOTA: Si su minSdkVersion es menor que 17, debe agregar los atributos de izquierda/derecha más antiguos , así como los nuevos atributos de inicio/derecha. En plataformas más antiguas, donde RTL no es compatible y los atributos start/right son desconocidos y, por lo tanto, se ignoran, necesita los atributos más antiguos a la izquierda/derecha.

Hay un control de pelusas separado que detecta ese tipo de error. (Nota: Para Gravity # LEFT y Gravity # START, puede usar estas constantes incluso cuando se dirigen a plataformas anteriores, porque la máscara de inicio es un superconjunto de la máscara de bits izquierda. Por lo tanto, puede usar gravedad = "inicio" than gravity = "left | start".)

Cuestiones relacionadas