2012-10-09 13 views
7

sto impostando le immagini di sfondo sui miei pulsanti personalizzati. Ho fatto uno screenshot per la mia app e ho detto che quando utilizzo "wrap_content" per la larghezza e l'altezza del pulsante, il pulsante è allungato. Quando correggo una dimensione in dp, apparirà piacevole (es: nella mia cartella mdpi ho le icone 48x48px, quindi ho messo 48dp in larghezza e altezza). Puoi spiegarmi perché, per favore?immagini di sfondo dei pulsanti allungate (utilizzo wrap_content o dp)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/definition_layout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:padding="5dp" 
android:layout_alignParentTop="true" > 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/buttons" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:padding="5dp" > 

    <Button 
     android:id="@+id/addToFavorites" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@drawable/favorites_button" /> 

    <Button 
     android:id="@+id/fontup" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@drawable/fontup_button" /> 

    <Button 
     android:id="@+id/fontdown" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@drawable/fontdown_button" /> 

    <Button 
     android:id="@+id/comment" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@drawable/comment_button" /> 

    <Button 
     android:id="@+id/speak" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@drawable/speak_button" /> 
    </LinearLayout> 

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@id/buttons"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/image_frame" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    <WebView 
     android:id="@+id/webView1" 
     android:layout_below="@id/image_frame" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    </LinearLayout> 
    </ScrollView> 

    </RelativeLayout> 

Il codice sopra mostra il mio file XML. È possibile controllare questo collegamento per visualizzare uno screenshot per il mio problema: https://www.dropbox.com/s/phnxt5p335ltqef/buttons_icon_altered.png

risposta

4

Appare allungato perché "wrap_content" indica che Android estenderà l'immagine per adattarla al layout che la racchiude.

Nel tuo caso, i pulsanti nel layout lineare occuperanno tutto lo spazio possibile all'interno del layout. Quindi, a meno che non si impostino l'altezza e la larghezza dei pulsanti, questi si allungheranno per riempire lo spazio occupato dal layout lineare e, di conseguenza, anche le loro immagini di sfondo si allungheranno insieme ai pulsanti.

Ma se si imposta la dimensione del pulsante su 48 dp, le immagini non dovranno allungarsi poiché sono anche di 48 px di dimensioni e quindi saranno piacevoli.

passare attraverso le eccellenti documentazione ufficiale per sviluppatori per ulteriori informazioni sui formati qui: https://developer.android.com/guide/topics/ui/declaring-layout.html

e per imparare a gestire i layout e le attività per molteplici formati Android dello schermo e risoluzioni qui:

https://developer.android.com/guide/practices/screens_support.html

+0

Sono belli sulla mia scheda Samsung Galaxy 10.1 tablet (con schermo mdpi), ma quando aprirò la stessa applicazione su un altro cellulare con uno schermo mdpi, occuperanno una grande dimensione o occuperanno un buon spazio perché "dp" è un'unità dinamica? – Anthony

+0

si. An anche perché la dimensione dello schermo entra in scena. La tua scheda avrà uno schermo extra large. In tal caso, l'immagine viene allungata proporzionalmente in ogni direzione, quindi sembra carina. –

+0

Quindi il tablet e il telefono cellulare (con la stessa dpi) ma le diverse dimensioni dello schermo useranno le stesse icone 48x48px? – Anthony

17

È possibile evitare lo stiramento di sfondo del pulsante impostando minWidth & minHeight a 0dp

<Button 
    android:id="@+id/addToFavorites" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:minWidth="0dp" 
    android:minHeight="0dp" 
    android:layout_margin="5dp" 
    android:background="@drawable/favorites_button" /> 
+0

Dai una piccola spiegazione al tuo codice. –

+4

Non ha funzionato per me –

+2

Questa è la risposta corretta! – Randy

7

è abbastanza facile:

  • Usa ImageButton invece di Button
  • impostare il sfondo attributo nulla
  • impostare il src attributo
  • set il scaleType attributo per centerInside

esempio di lavoro:

<ImageButton 
android:id="@+id/my_awesome_button" 
android:scaleType="centerInside" 
android:background="@null" 
android:gravity="center" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:src="@drawable/my_awesome_drawable"/> 

Nota: È anche possibile utilizzare un dp valore invece di "wrap_content" .

Spero che aiuti.

Problemi correlati