web-dev-qa-db-fra.com

Comment utiliser un composé extractible au lieu d'un LinearLayout contenant un ImageView et un TextView

Ran le nouvel outil Lint contre mon code. Il a fait beaucoup de bonnes suggestions, mais je ne peux pas comprendre celle-ci.

Cette étiquette et ses enfants peuvent être remplacés par un et un composé extractible

Problème: vérifie si le nœud actuel peut être remplacé par un TextView à l'aide des éléments composables.

Un LinearLayout qui contient un ImageView et un TextView peut être manipulé plus efficacement en tant que composé extractible

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 sur la manière de rendre un composé extractible dans ce cas?

186
Leo

TextView est livré avec 4 tirables composés, un pour chacun des côtés gauche, supérieur, droit et inférieur.

Dans votre cas, vous n'avez pas du tout besoin de LinearLayout et ImageView. Ajoutez simplement Android:drawableLeft="@drawable/up_count_big" à votre TextView.

Voir TextView # setCompoundDrawablesWithIntrinsicBounds pour plus d'informations.

248
chiuki

si, pour une raison quelconque, vous devez ajouter via du code, vous pouvez utiliser ceci:

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

où left, top, right bottom sont Drawables

20
Javier P

Pour ajouter à cela - il semble important de définir la largeur et la hauteur du dessinable selon ce post:

(son code fonctionne)

3

Vous pouvez utiliser une implémentation générale composée, mais si vous avez besoin de définir une taille, utilisez 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" />
1
Oleksandr