Fondo de azulejos es empujando es View size

Tengo un mapa de bits de mosaico que estoy usando como el fondo de View . Esta View , digamos, tiene android:layout_height="wrap_content" . El problema es que la altura del mapa de bits utilizado en el fondo está participando en la medición de la vista, aumentando la altura de View . Esto se puede observar cuando el tamaño del contenido de View es menor que la altura del mapa de bits utilizado como fondo de mosaico.

Dejame mostrarte un ejemplo. El mapa de bits de mosaico:

Introduzca aquí la descripción de la imagen

El mapa de bits tile_bg.xml ( tile_bg.xml ):

 <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/tile" android:tileMode="repeat"/> 

El diseño:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="#FFFFFF"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/tile_bg" android:text="@string/hello" android:textColor="#000000" /> </LinearLayout> 

Como se ve:

Introduzca aquí la descripción de la imagen

La altura del TextView termina siendo la altura del mapa de bits. Lo que esperaba es que el mapa de bits se acorta al tamaño de la View .

¿Hay alguna manera de lograr esto?

Notas:

  • No puedo usar 9patch drawables ya que el fondo necesita ser repetido de una manera de la manera de la teja, estiramiento no es una opción.
  • No puedo establecer una altura fija para la View , depende de los niños (estoy usando esto en un ViewGroup )
  • Este comportamiento extraño sucede como expliqué antes cuando el tamaño de la View es más pequeño que el tamaño del mapa de bits, de lo contrario el mapa de bits se repite un recorte correctamente (es decir, si el tamaño de la vista es 1,5 veces el tamaño del mapa de bits, Viendo 1,5 veces el mapa de bits).
  • El ejemplo se ocupa de la altura, pero es el mismo utilizando el ancho.

Necesita un BitmapDrawable personalizado que devuelve 0 de getMinimumHeight () y getMinimumWidth (). Aquí hay uno que he llamado BitmapDrawableNoMinimumSize que hace el trabajo:

 import android.content.res.Resources; import android.graphics.drawable.BitmapDrawable; public class BitmapDrawableNoMinimumSize extends BitmapDrawable { public BitmapDrawableNoMinimumSize(Resources res, int resId) { super(res, ((BitmapDrawable)res.getDrawable(resId)).getBitmap()); } @Override public int getMinimumHeight() { return 0; } @Override public int getMinimumWidth() { return 0; } } 

Por supuesto no se puede (AFAIK) declarar drawables personalizados en XML, por lo que tiene que instanciar y establecer el fondo del texto así:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); BitmapDrawable bmpd =new BitmapDrawableNoMinimumSize(getResources(), R.drawable.tile); bmpd.setTileModeX(TileMode.REPEAT); bmpd.setTileModeY(TileMode.REPEAT); findViewById(R.id.textView).setBackgroundDrawable(bmpd); } 

Y, por supuesto, eliminar el atributo de fondo de la disposición xml:

 <TextView android:id="@+id/textView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Testing testing testing" android:textColor="#000000" /> 

He probado esto y parece que funciona.

  • Tabulación personalizada para la aplicación android con animación
  • ¿Cuál es la mejor manera de separar diferentes lógicas de programación para diferentes diseños en Android?
  • Cómo tener EditText con borde en Android Lollipop
  • Botón de Android con icono y texto
  • Vista de Android comparando dos vistas de igualdad
  • No se puede iniciar uiautomatorviewer
  • La altura de ViewPager en el diseño del Coordinador está más que disponible
  • Elementos del menú de vista de navegación, como Google Play Store
  • Cómo manejar el evento de clic en cada celda de un diseño de tabla
  • Trabajar con modo retrato y paisaje de forma programática en android
  • ¿Cómo comprobar el tipo de un widget de vista?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.