web-dev-qa-db-fra.com

android layout: cette balise et ses enfants peuvent être remplacés par un <TextView /> et un composé dessinable

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 effectuée pour le 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 à l'écran:

enter image description here

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

107
pdilip

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" />
143
NPike

Fusionnez le TextView et le ImageView en un, en utilisant les méthodes setCompoundDrawable*() de TextView, ou en utilisant Android:drawableLeft.

101
Romain Guy

Je pensais que j'essaierais d'obtenir des puntos 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

18
QED

Parfois, il est possible de remplacer ImageView (ou plusieurs) et TextView par un TextView par un ou plusieurs dessin (s). Il n'y a PAS beaucoup de paramètres qui peuvent être appliqués au composé dessinable en utilisant l'API native et cela bibliothèque TextViewRichDrawable , mais si vous pouvez gérer un TextView au lieu d'utiliser LinearLayout, vous devriez certainement utilisez-le .

La liste des attributs et paramètres qui peuvent être appliqués aux drawables composés:

Taille: ( OUI, vraiment ):

<com.tolstykh.textviewrichdrawable.TextViewRichDrawable
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Some text"
    app:compoundDrawableHeight="24dp"
    app:compoundDrawableWidth="24dp"/>

Même définissez la ressource vectorielle comme dessinable:

<com.tolstykh.textviewrichdrawable.TextViewRichDrawable
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Some text"
    app:drawableTopVector="@drawable/some_vector_drawble"
    app:drawableEndVector="@drawable/another_vector_drawable" />

Rembourrage de Drawable utilisant l'API native Android:drawablePadding -> lien

Voici un exemple:

textView rich drawable

3
Oleksandr

Un LinearLayout qui contient un ImageView et un TextView peut être traité plus efficacement comme un dessin composé (un seul 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 de l'autre avec des marges, cela peut être remplacé par un attribut drawablePadding.

Il existe un correctif rapide pour effectuer cette conversion dans le plugin Eclipse.

De: Android Documents officiels de l'API!

2
ilikyar

Lorsque j'ai suivi le code ci-dessus, le texte à l'intérieur de TextView ne se définit pas correctement. Vous devez régler sa gravité sur center | start pour obtenir ce qui est indiqué dans la question posée.

La vue textuelle ressemble à ceci:

   <TextView
        Android:id="@+id/export_text"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:drawableLeft="@drawable/up_arrow"
        Android:drawableStart="@drawable/up_arrow"
        Android:gravity="center|start"
        Android:text="....."
        Android:textSize="@dimen/font_size15" >
    </TextView>
1
Vikas

Si vous ne souhaitez pas modifier ImageView et TextView, vous pouvez modifier la version dans AndroidManifest.xml comme suit:

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

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

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

0
Dunken_sai

Ajouter tools:ignore="UseCompoundDrawables" à <LinearLayout>.

0
CoolMind