¿Icono con el interior del texto – cómo definir en la disposición?

Quiero tener un TextView (para mostrar un recuento) sobrevolando un icono en el ActionBar. Lo que hice fue tener un RelativeLayout , establecer un fondo para él, a continuación, poner ese TextView en ese diseño y tornillo con el margen hasta que encaje, pero que se rompe tan pronto como la longitud del texto varía. Establecer un fondo en el TextView no es grande tampoco porque no puedo colocar el texto en relación con el icono.

Aquí está mi XML:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_gravity="fill_horizontal" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="@drawable/cart" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0" android:layout_marginTop="5dp" android:layout_marginLeft="43dp" android:textAppearance="?android:attr/textAppearanceMedium" /> </RelativeLayout> </RelativeLayout> 

Y aquí hay una captura de pantalla para mostrar lo que quiero decir:

Introduzca aquí la descripción de la imagen

¿Hay una manera libre de estrés, una biblioteca tal vez, que me permite establecer un TextView sobre un Drawable para que el TextView siempre está centrado / posicionado?

Establecer un fondo en el TextView no es grande tampoco porque no puedo colocar el texto en relación con el icono.

En realidad usted puede colocar su texto en relación con su icono. Debe separar el ícono del carro y el ícono de la insignia de número como imágenes separadas y colocarlas individualmente. Tuve que hacer esto yo no hace mucho tiempo, y lo hice con un RelativeLayout , con un ImageView del icono del carrito y un TextView para los números con un "parche" de 9 parches como fondo.

El truco consiste en alinear el número TextView a la izquierda y la parte inferior del icono del carro ImageView y, a continuación, utilice los márgenes izquierdo y inferior para empujar su insignia de número a la parte superior y derecha de su icono de carrito. De esta manera, la insignia de número siempre se basa en el icono del carrito.

Además, establezca la gravity de su TextView en el center , a medida que los números crecen más ancho, la posición relativa del texto es casi la misma. Por último, utilice padding en su TextView para controlar cuánto espacio hay entre el borde del número y el borde de su "insignia" 9 parches.

He aquí un fragmento de mi implementación (he redactado algo de esto):

  <RelativeLayout android:id="@+id/cartButton" android:layout_width="wrap_content" android:layout_height="fill_parent" > <ImageView android:id="@+id/cartIconImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:src="@drawable/ic_menu_cart" /> <TextView android:id="@+id/cartBadge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/cartIconImageView" android:layout_alignLeft="@+id/cartIconImageView" android:layout_marginBottom="10dp" android:layout_marginLeft="9dp" android:background="@drawable/state_list_cart_badge" android:gravity="center" android:includeFontPadding="false" android:lines="1" android:paddingLeft="8dp" android:paddingRight="8dp" android:text="7" /> </RelativeLayout> 

Y esto es lo que parece:

Introduzca aquí la descripción de la imagen

Introduzca aquí la descripción de la imagen

Utilice un FrameLayout. Siempre se le llama inútil, pero si me preguntas que es perfecto para establecer una vista encima de otro.

Cita :

Las vistas de los niños se dibujan en una pila, con el niño añadido más recientemente en la parte superior. El tamaño de FrameLayout es el tamaño de su hijo más grande (más el relleno), visible o no (si el padre de FrameLayout lo permite). Las vistas que se GONE se utilizan para dimensionar sólo si setConsiderGoneChildrenWhenMeasuring () se establece en true.

Yo sólo usaría un TextView, y establecer un parche 9 como el fondo:

9 archivo de parche

Usted puede ser que tenga que jugar alrededor con él (yo apenas batido esto para arriba en un minuto o dos), pero algo como el derecho muy inferior en la imagen es lo que usted quiere. Será mucho más consistente que tratar dos puntos de vista.

  • Resolución de imagen para mdpi, hdpi, xhdpi y xxhdpi
  • Personalizar el relleno y el margen en IconPageIndicator
  • El tamaño de fuente de TextView en la aplicación Android cambia al cambiar el tamaño de la fuente de la configuración nativa
  • android Baja memoria: no más proceso de fondo ?? Necesitas ayuda
  • Android Studio 0.3.6 problemas de representación cuando spinner con android: entries = "@ array / some_array" utilizado
  • Android: ¿Es posible calcular la altura de una vista antes de que se dibuje?
  • ¿Cuál es el atributo de estilo de Android para el color de fondo del enlace seleccionado?
  • La vista personalizada de Android vuelve a la posición original al actualizar
  • Problema con la última fila de GridView en Android
  • Cómo obtener el ancho y la altura de la pantalla
  • RelativeLayout y TextView con gravedad no funcional
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.