2011-09-19 15 views
7

Ho un file xml piuttosto semplice che ha un pulsante immagine in esso. L'immagine si mostra bene sul designer di layout grafico xml, si mostra bene quando eseguo una build di sviluppo, ma non appena viene creato il file apk firmato ed eseguito, l'immagine non viene più visualizzata. È solo un pulsante vuoto. Non riesco a pensare a una ragione, a qualche idea? Il file XML è simile al seguente:Android: non visualizzabile Drawable

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

L'immagine @drawable/chapter_select è abbastanza piccolo (41 * 41) file PNG che si trova nella cartella res/drawable.

risposta

12

Sembra che questo è un bug con Android, dove a volte la prima immagine nella cartella drawable non si presenta. Aggiunta un'immagine fittizia chiamata aaaa.png alla cartella drawable e il problema è stato risolto. Trovato la risposta qui: ImageButton does not display a particular drawable

2

cercare di mettere l'immagine in drawable-hdpi e drawable-MDPI cartella dipende da quale dispositivo si si esegue un'applicazione, l'immagine viene cercato in queste cartelle ...

Ma mettendo in mezzo disegnabili che l'immagine dovrebbe essere disponibile ovunque, ma a volte (dipende dalle impostazioni del manifest) questo non può essere vero, voglio dire che puoi disattivare la modalità di compatibilità.

anche si può provare dinamicamente in fase di esecuzione per impostare l'immagine alla vista

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

Non voglio metterlo in una cartella specifica della densità dello schermo perché voglio che tutti i dispositivi siano in grado di usare l'immagine senza fare copie. L'impostazione dinamica dell'immagine non ha cambiato nulla, non è ancora visibile sulla build firmata. Grazie per aver provato Luk. – odiggity

2

Aveva lo stesso problema e lo risolveva rimuovendo tutti i caratteri speciali. Nel mio caso si trattava di trattini '-' nel nome file:

background-720.png => background.png.

0

La mia situazione era strana. Tutto era corretto fino all'integrazione del rapporto FireBase Crash nella mia Applicazione.

Ho appena aggiunto compilare 'com.google.firebase:firebase-crash:11.0.1' & DrawableLeft scomparve .Quando ho passato il xml, ha notato un avvertimento (In foderato di seguito).

Quindi aggiunto android:drawableStart & problema risolto.

Ancora mi chiedo in merito alla relazione di FireBase Crash che riporta allo stesso.

Utilizzando sinistra/destra al posto di inizio/fine attributi usando la gravità # SINISTRA e gravità # giusto può portare a problemi quando un layout è reso in locali in cui il testo scorre da destra a sinistra. Usa Gravity # START e Gravity # END invece.

Analogamente, in Gravità XML e attributi layout_gravity, utilizzare start anziché a sinistra. Per gli attributi XML come paddingLeft e layout_marginLeft, utilizzare paddingStart e layout_marginStart.

NOTA: Se la tua versione minSdk è inferiore a 17, è necessario aggiungere sia gli attributi left/right precedenti sia i nuovi attributi start/right. Su piattaforme precedenti, in cui RTL non è supportato e gli attributi di avvio/destra sono sconosciuti e pertanto ignorati, sono necessari gli attributi precedenti di left/right .

C'è un controllo di sfilacciamento separato che cattura quel tipo di errore. (Nota: per Gravità # SINISTRA e Gravità n. START, è possibile utilizzare queste costanti anche quando si targetano piattaforme precedenti, poiché la maschera di bit di inizio è un superset della maschera di bit sinistra. Pertanto, è possibile utilizzare gravità = "start" than gravity = "left | start".)

Problemi correlati