168

Ran le nouvel outil de charpie contre mon code. Il est venu avec beaucoup de bonnes suggestions, mais celui-ci je ne peux pas comprendre.Comment est-ce que j'utilise un drawable composé au lieu d'un LinearLayout qui contient un ImageView et un TextView

Cette balise et ses enfants peuvent être remplacés par un et un composé drawable

Problème: Vérifie si le noeud courant peut être remplacé par un TextView en utilisant dessinables composés.

A LinearLayout qui contient un ImageView et un TextView peut être plus efficacement traité comme un composé drawable

Et voici ma mise en page

<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 
android:layout_centerInParent="true"> 

<ImageView 
    android:id="@+id/upImage" 
    android:layout_width="20dp" 
    android:layout_height="20dp" 
    android:layout_gravity="center_vertical" 
    android:scaleType="centerInside" 
    android:src="@drawable/up_count_big"> 
</ImageView> 

<TextView 
    android:id="@+id/LikeCount" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="2dp" 
    android:layout_marginBottom="1dp" 
    android:textColor="@color/gray" 
    android:textSize="16sp" 
    android:layout_gravity="center_vertical"> 
</TextView> 
</LinearLayout> 

Quelqu'un peut-il donner un exemple concret de la façon de faire un composé tirable dans ce cas?

+4

fwiw c'est l'un des contrôles que je désactive normalement, à cause des faux positifs. Tous les combos 'TextView' /' ImageView' ne peuvent pas être remplacés de cette façon. –

+0

@RichardLeMesurier Vous pouvez utiliser l'affichage personnalisé si vous souhaitez définir une taille d'image. Cela rendra votre vue plus claire. Voir ma réponse: http://stackoverflow.com/a/31916731/2308720 – Oleksandr

+0

@Alex Je suis d'accord dans de nombreux cas, mais d'après mon expérience, je n'ai souvent pas la peine de créer une vue personnalisée pour contourner ce que je considère être un contrôle de charpie buggy. –

Répondre

224

TextView est livré avec 4 tirages composés, un pour chacun de gauche, haut, droite et bas.

Dans votre cas, vous n'avez pas besoin des LinearLayout et ImageView. Il suffit d'ajouter android:drawableLeft="@drawable/up_count_big" à votre TextView. Pour plus d'informations, voir TextView#setCompoundDrawablesWithIntrinsicBounds.

+26

pas nécessairement, car votre lien montre un exemple avec une image dynamique. Dans ce cas, il peut être encore plus facile ou préférable d'utiliser 'ImageView'.L'avertissement dit 'peut être remplacé par', pas 'devrait être remplacé par' –

+8

mais comment puis-je faire de l'espace entre l'image et le texte –

+6

@Hitesh Dhamshaniya, en utilisant la propriété DrawablePadding en XML ou en code. – Snicolas

14

si pour une raison pour laquelle vous devez ajouter via le code, vous pouvez utiliser ceci:

mTextView.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom); 

où à gauche, en haut, en bas à droite sont dessinables

+0

Exiger API 17 ci-dessus – Puni

+0

Je ne pense pas, [documentation] (https://developer.android.com/reference/android/widget/TextView.html) états depuis API 1 –

+0

Voir ce lien [documentation] (https : //developer.android.com/reference/android/widget/TextView.html#setCompoundDrawablesRelativeWithIntrinsicBounds (android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable .Drawable)) – Puni

2

Vous pouvez utiliser la mise en œuvre drawable général composé, mais si vous avez besoin de définir une taille d'utilisation drawable cette bibliothèque:

https://github.com/a-tolstykh/textview-rich-drawable

Voici un petit exemple d'utilisation:

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