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:
- Disposición de Android: expandir ImageView para rellenar el ancho, pero no mayor?
- EditText no desplazable dentro de ScrollView
- Las imágenes se repiten en ListView
- Líneas de alineación izquierda y derecha dentro de Listview?
- Android Studio 2.2 Vista previa de todos los tamaños de pantalla que faltan
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:
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 unViewGroup
) - 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.
- Cómo hacer aplicaciones hermosas y con estilo como Timely
- Al extender FrameLayout, las vistas de los niños no se mostrarán más
- Android expandiblelistview no puede mostrar el último grupo cuando se ha expandido
- Descartar el teclado cuando haga clic fuera de EditText en android
- ¿Cómo puedo calcular la altura y el ancho de la pantalla en tiempo de ejecución?
- Evitar que un FloatingActionButton se desplace dentro de ViewPager
- ¿Hay alguna manera de poner la vista ligeramente fuera de su disposición principal?
- Estado lista estado desplegable y desactivado
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.
- ¿Cómo conseguir que Spoon tome capturas de pantalla para las pruebas de Espresso?
- Error al ejecutar Android Project en Intellij IDEA