Cómo uso un elemento de diseño compuesto en lugar de un LinearLayout que contiene una ImageView y una TextView
Ejecuté la nueva herramienta Lint contra mi código. Llegó con un montón de buenas sugerencias, pero esta no puedo entender.
Esta etiqueta y sus hijos pueden ser reemplazados por uno y un elemento de diseño compuesto
Problema: Comprueba si el nodo actual puede ser reemplazado por un TextView usando elementos de diseño compuestos.
Un LinearLayout que contiene una ImageView y una TextView se puede manejar de manera más eficiente como un elemento de diseño compuesto
Y aquí está mi layout
<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>
¿Puede alguien proporcionar un ejemplo concreto de cómo hacer un elemento de diseño compuesto en este caso?
4 answers
TextView
viene con 4 compuesto dibujables, uno para cada uno de izquierda, superior, derecha e inferior.
En su caso, no necesita el LinearLayout
y ImageView
en absoluto. Simplemente agregue android:drawableLeft="@drawable/up_count_big"
a su TextView
.
Ver TextView#setCompoundDrawablesWithIntrinsicBounds para más información.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-29 23:20:01
Si por alguna razón necesitas agregar vía código, puedes usar esto:
mTextView.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);
Donde izquierda, arriba, abajo derecha son elementos de diseño
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-11 14:37:57
Para agregar a esto-parece importante definir el ancho y alto del elemento de diseño según este post:
(su código funciona)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:24
Puede usar la implementación general de un elemento de diseño compuesto, pero si necesita definir un tamaño de elemento de diseño, use esta biblioteca:
Https://github.com/a-tolstykh/textview-rich-drawable
Aquí hay un pequeño ejemplo de uso:
<com.tolstykh.textviewrichdrawable.TextViewRichDrawable
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some text"
app:compoundDrawableHeight="24dp"
app:compoundDrawableWidth="24dp" />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-27 14:33:24