Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Mantener texto en TextView con drawableLeft centrado

En mi aplicación tengo una barra de encabezado que consta de un solo textview con fill_parent como ancho, que tienen un color de fondo específico y un poco de texto centrado. Ahora quiero agregar un dibujable en el lado izquierdo de la barra de encabezado, por lo que establecer el drawableLeft y seguro que el texto y la imagen se muestra. Sin embargo, el problema aquí es que el texto ya no está correctamente centrado, por ejemplo, cuando se añade el dibujable, el texto se desplaza un poco hacia la derecha, como se muestra en las capturas de pantalla:

Sin dibujar
Con dibujable

  • Android - Cómo permitir el desplazamiento horizontal y vertical
  • Android maps: ¿Cómo hacer clic en un mapa?
  • ¿Cómo puedo cambiar el fondo de los cuadros de diálogo de alerta de Android?
  • ¿Cómo puedo utilizar una fuente personalizada en el área de entrada de un método de entrada?
  • Cómo tomar una captura de pantalla mediante programación en Android?
  • Android: compruebe si los servicios de ubicación están habilitados utilizando el proveedor de ubicación fusionado
  • ¿Hay de todos modos puedo centrar el texto correctamente y tener el dibujable posicionado como está arriba sin usar un artículo de disposición adicional (como un LinearLayout)?

  • Cómo animar el cambio de un gestor de diseño de la vista de reciclador
  • ¿Cómo agrego un proyecto de biblioteca a Android Studio?
  • Cambiar el color del cursor de un EditText en Android 3.0
  • ¿Cómo obtener la huella digital del certificado de firma (SHA1) para OAuth 2.0 en Android?
  • Android GridView con categorías?
  • Cordova no construirá más
  • 13 Solutions collect form web for “Mantener texto en TextView con drawableLeft centrado”

    La manera más simple de obtener que es:

    <RelativeLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/head" > <ImageView android:id="@+id/cat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:onClick="onClick" android:layout_marginTop="10dp" android:layout_alignParentLeft="true" android:src="@drawable/btn_back_d" /> <TextView android:id="@+id/TvTitle" android:layout_width="match_parent" android:layout_height="match_parent" android:text="" android:layout_centerHorizontal="true" android:textColor="#000000" android:textSize="20sp"/> 

    Dónde

    • ImageView tiene la propiedad alignParentLeft definida true y
    • TextView tiene el centroHorizontal establecido true

    Aunque frágil, puede evitar el uso de un diseño de envoltura estableciendo un relleno negativo en el dibujable:

     <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:drawableLeft="@drawable/icon" android:drawablePadding="-20sp" android:text="blah blah blah" /> 

    Tendrás que ajustar el relleno al ancho del dibujable, pero te quedarás con un único TextView en lugar de un LinearLayout extra o etc.

    Tuve el mismo problema y lo resolví con pequeños cambios en Textview,

     <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:drawableLeft="@drawable/search_red" android:text="your text goes here" /> 

    Ese trabajo para mí.

     <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@drawable/trusted" android:gravity="center" android:text="@string/trusted"/> </LinearLayout> 

    Puedes usar android:gravity="center_vertical" para centrar el texto verticalmente con la imagen. O puede ser centrado dentro del textView usando android:gravity="center" .

     <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:drawableLeft="@drawable/icon" android:text="Your text here" /> 

    Usa de esta manera

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/White" > <RelativeLayout android:id="@+id/rlheader" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentTop="true" android:background="@color/HeaderColor" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="Header_Title" /> <ImageView android:id="@+id/ivSetting" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:src="@drawable/setting" /> </RelativeLayout> </RelativeLayout> 

    Se parece algo a este complemento de mi proyecto de demostración

    Imagen de cabecera

    Me he enfrentado a un problema similar. Se TextView mediante el uso de TextView único con los layout_width="wrap_content" y layout_gravity="center" :

     <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@drawable/some_drawable" android:text="some text" android:layout_gravity="center" android:gravity="center" /> 

    U puede establecer su encabezado como este

     <RelativeLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/head" > <ImageView android:id="@+id/cat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:onClick="onClick" android:layout_marginTop="10dp" android:src="@drawable/btn_back_" /> <RelativeLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" > <TextView android:id="@+id/TvTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:textColor="#000000" android:textSize="20sp"/> </RelativeLayout> </RelativeLayout> 

    Solo dale la cantidad de Textview, fuente de la imagen según tu necesidad

    Drawable es parte del TextView, por lo que la altura del textview será la altura del drawable si la altura de su texto es más pequeña que la altura drawable.

    Puede establecer el atributo de gravedad de TextView en center_vertical, por lo que el texto estará en el centro.

    Puede establecer el padre del TextView como RelativeLayout cuyo ancho es match_parent.

     <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/edit_location_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/add_location_text_view" android:gravity="start|center_vertical" android:layout_centerHorizontal="true" android:drawableStart="@android:drawable/ic_menu_edit" android:text="Edit Location" /> </RelativeLayout> 

    Así es como se ve el resultado.

     <TextView android:id="@+id/distance" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:drawableLeft="@drawable/distance" android:drawablePadding="10dp" android:padding="10dp" android:textAlignment="center" android:textColor="#ffffff" android:textSize="20sp" /> 

    Una solución simple es usar una imagen transparente con el mismo tamaño en el lado opuesto de la vista de texto. En mi ejemplo he copiado mi vector_image real y he cambiado los colores para que sean transparentes.

     <TextView android:id="@+id/name" style="@style/TextStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawableEnd="@drawable/ic_vector_caret_down_green" android:drawableStart="@drawable/ic_vector_space_18" android:gravity="center" android:padding="12dp" android:textColor="@color/green"/> 

    Simple como esto .. intentarlo ..

      <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center|left" android:drawableLeft="@drawable/icon" android:text="something something" /> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.