visual vista tabla significa resultados que pasar para optometrica medidas licencia examen conducir como agudeza android

android - vista - vision 20/200 que significa



Los dibujables de fondo definen el tamaño de la vista (4)

En aras de la claridad, esta pregunta ha sido editada significativamente .

Digamos que tengo un recurso .png de 100x100px:

Quiero usar esa imagen como fondo para mis TextView s, cuyo tamaño está determinado por su contenido, que es variable en tiempo de ejecución. Especialmente, quiero que la imagen se muestre en mosaico cuando el tamaño de TextView sea ​​mayor que 100x100px, y quiero que se recorte cuando TextView sea ​​menor que 100x100px.

Este último parece ser difícil.

Código de ejemplo

Tengo un recurso bg_tile.xml :

<bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/bg" android:tileMode="repeat" />

Mi archivo de diseño:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="8dp" android:background="@drawable/bg_tile" android:text="Short text" android:textSize="20sp" /> <TextView android:layout_margin="8dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bg_tile" android:text="Long text long text long text long text long text long text long text long text long textlong text long text long text long text long text long text long text long text long textlong text long text long text long text long text long text long text long text long text " android:textSize="20sp" /> </LinearLayout>

Qué esta pasando

Aquí hay una captura de pantalla del resultado de este código, y uno de lo que esperaría / lo que quiero:

Como puede ver, la parte de mosaico funciona y el azulejo inferior se está cortando. Sin embargo, cuando TextView es más pequeño que el fondo, TextView toma el tamaño del fondo.

Las soluciones sugeridas

  • android:gravity="clip_vertical|clip_horizontal" - Esto no funciona, incluso sin tilemode.
  • Utilice match_parent como match_parent diseño, no es una opción.
  • Configuración de una altura fija: no hay forma de saber cuánto TextView el contenido de TextView , y con eso su tamaño.

¿Cómo puedo lograr mi objetivo?


No lo he intentado yo mismo, pero puedes probar esta idea / hackear / solución alternativa:

La altura / anchura mínima de una vista (TextView) está determinada por su fondo dibujable (entre otras cosas). Utiliza el getMinimumHeight () y getMinimumWidth () de Drawable de fondo para determinar la altura y el ancho mínimos de la vista.

Parece que desea que la altura y el ancho mínimos de la Vista sean 0 (excluyendo el relleno) y que la anchura / altura de la Vista solo se base en el contenido de la Vista (en su caso, el texto de TextView).

Intente esto en el onCreate de su Actividad o en el onCreateView de su Fragmento, donde obtiene una retención del TextView que está tratando de "arreglar". Llamemos a esto TextView ''tv'':

TextView tv; ... ... tv = (TextView)...findViewById(...); .... // Swap the ''standard'' bitmap background with one that has no minimum width/height. BitmapDrawable background = (BitmapDrawable)tv.getBackground(); // assuming you have bg_tile as background. BitmapDrawable newBackground = new BitmapDrawable(background.getBitmap) { @Override public int getMinimumWidth() { return 0; } @Override public int getMinimumHeight() { return 0; } }; newBackground.setTileModeXY(background.getTileModeX(), background.getTileModeY()); tv.setBackgroundDrawable(newBackground); ... ...


Prueba esto:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/bg_light" android:tileMode="repeat" android:gravity="clip_vertical|clip_horizontal" />

Opciones adicionales: http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap

Edición: leí la documentación, esto no funcionará con el conjunto tileMode:

android:tileMode

Keyword. Defines the tile mode. When the tile mode is enabled, the bitmap is repeated. Gravity is ignored when the tile mode is enabled.

Si conoce el tamaño de las Vistas antes de tiempo y sabe que se recortaría, podría tener un Bitmap-XML para tileMode y otro para la gravedad, luego use el apropiado. No ideal, por desgracia.


Siempre puedes usar:

android:layout_width="match_parent" android:layout_height="match_parent"


Supongo que tu problema está aquí:

android: layout_width = "wrap_content" android: layout_height = "wrap_content"

Establece el ancho para envolver el contenido, y el contenido incluye la imagen de fondo. No estoy seguro de cuál es el contexto de su vista, pero si puede establecer la altura desde el código o desde el archivo xml, su problema debería desaparecer. Es posible que también desee agregar android: scaleType = "centerCrop" o centerInside como Houcine mencionó si el fondo todavía no se muestra a su gusto.

Si nos dice el contexto de estas opiniones vagas, es probable que podamos darle más información.