132 votes

Mise en page Android : Cette balise et ses enfants peuvent être remplacés par un <TextView/> et un drawable composé.

Lorsque j'exécute la mise en page sur un fichier XML spécifique, j'obtiens ceci :

 This tag and its children can be replaced by one <TextView/> 
and a compound drawable

Quelle modification doit être apportée au code xml suivant :

<LinearLayout android:id="@+id/name_layout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:background="@drawable/grouplist_single_left_grey_area" >
                <ImageView android:id="@+id/photo_image"
                    android:layout_width="@dimen/thumbnail_width"
                    android:layout_height="@dimen/thumbnail_height"
                    android:paddingBottom="5dip"
                    android:paddingTop="5dip"
                    android:paddingRight="5dip"
                    android:paddingLeft="5dip"
                    android:layout_marginRight="5dip"
                    android:clickable="true"
                    android:focusable="true"
                    android:scaleType="fitCenter"
                    android:src="@*android:drawable/nopicture_thumbnail"
                    android:background="@drawable/photo_highlight" />
                <TextView android:id="@+id/name"
                    android:paddingLeft="5dip"
                    android:layout_weight="1"
                    android:layout_width="0dip"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical"
                    android:textAppearance="?android:attr/textAppearanceLarge" />
            </LinearLayout>

Voici à quoi cela ressemble sur l'écran :

enter image description here

L'icône de la caméra est la valeur par défaut. En cliquant dessus, l'utilisateur a la possibilité de choisir une autre image.

3 votes

+1, parce que cette situation semble plus complexe que ce qui peut être géré par un drawable composé. Si vous n'aviez pas accepté la réponse de Romain, vous auriez pu obtenir une réponse plus approfondie.

173voto

NPike Points 5187

Pour développer la réponse de Romain Guy, voici un exemple.

Avant :

<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="wrap_content" 
android:layout_marginTop="10dp"  
android:padding="5dp" >

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="My Compound Button" />

<ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/my_drawable" />
</LinearLayout>

Après :

<TextView  
    android:layout_marginTop="10dp"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:text="My Compound Button" 
    android:drawableRight="@drawable/my_drawable" android:padding="5dp" />

58 votes

Nifty. Mais que faire si j'ai besoin de définir des propriétés sur le drawable, comme le définir à 60dip x 60dip ?

4 votes

Hé regarde ça, tout ce que j'avais à faire c'était de chercher. stackoverflow.com/a/6671544/1224741

0 votes

@KyleClegg, C'est possible avec une bibliothèque personnalisée. Voir ma réponse - stackoverflow.com/a/41347470/2308720

107voto

Romain Guy Points 57114

Fusionner les TextView et le ImageView en une seule, en utilisant la fonction setCompoundDrawable*() ou en utilisant android:drawableLeft .

33 votes

Pourriez-vous m'indiquer un exemple illustrant comment cela peut être fait ? Je ne sais pas comment tous les attributs de l'ImageView peuvent être intégrés dans Android:drawableLeft. Je vous remercie.

1 votes

Qu'en est-il des attributs d'ImageViews comme scaleType ?

3 votes

Comment augmenter l'écart entre l'image et le texte ?

20voto

QED Points 5350

J'ai pensé que j'allais essayer d'obtenir quelques points supplémentaires pour cela aussi : vous pouvez ajouter un remplissage entre l'image et le texte en utilisant android:drawablePadding . https://stackoverflow.com/a/6671544/1224741

2voto

ilikyar Points 11

A LinearLayout qui contient un ImageView et un TextView peut être traitée plus efficacement en tant qu'objet composite (une seule TextView en utilisant le drawableTop , drawableLeft , drawableRight et/ou drawableBottom attributs pour dessiner une ou plusieurs images adjacentes au texte).

Si les deux widgets sont décalés l'un par rapport à l'autre avec des marges, ce peut être remplacé par un drawablePadding attribut.

Il y a un correctif rapide de lint pour effectuer cette conversion dans l'Eclipse d'Eclipse.

De : Documentation officielle de l'API Android !

0voto

Dunken_sai Points 41

Si vous ne voulez pas changer l'ImageView et le TextView, vous pouvez changer la version dans le AndroidManifest.xml comme :

    <uses-sdk`
    android:minSdkVersion="8"
    android:targetSdkVersion="18" 
    />

Si votre version est Android:targetSdkVersion="17", changez-la en "18".

J'espère que cela va rectifier. Je l'ai fait et je l'ai bien fait

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X