2010-11-16 11 views
11

el androide propiedad: layout_gravity = "clip_vertical | horizontal" hace lo siguiente como se menciona en la documentación del SDK:¿Qué es Android: layout_gravity = "clip_vertical" exactamente

opción adicional que se puede ajustar a tienen la bordes superiores e inferiores de el niño recortado en los límites de su contenedor. El clip se basará en la gravedad vertical : una gravimetría superior cortará el borde inferior, una gravedad inferior cortará el borde superior, y ni cortará ambos bordes.

pero no puedo ver nada de esto en mis aplicaciones

así que lo que es el propósito de esta propiedad exactamente?

gracias

Respuesta

19

versión corta:

clip_horizontal y clip_vertical se aplican a las mediciones de la vista sí mismo, para poder efectuar cualquier contenido (tales como la imagen en un BitmapDrawable).


Versión larga:

me he encontrado cierta confusión similar sobre clip_horizontal y clip_vertical. (En mi caso, estaba relacionado con android: gravedad para un mapa de bits, pero es lo suficientemente similar como para ser aplicable.)

De la documentación, pensé que algo así como android: gravity = "top | left | clip_vertical" en una el mapa de bits provocaría que la esquina superior izquierda de la imagen se coloque en la esquina superior izquierda de la vista, y que, si el mapa de bits fuera más alto que la vista, se "recortaría" en el borde inferior de la vista. En otras palabras, muestre solo la mayor parte del mapa de bits que la vista es lo suficientemente alta para revelar; no estire el mapa de bits, sino que solo muestre lo que encaje, dejando que el resto se extienda por debajo del borde inferior.

Sin embargo, sucedió todo lo contrario: cuando configuré clip_vertical, un mapa de bits grande se aplastó verticalmente para ajustarse al alto de la vista.

Después de examinar el método applyDisplay() en la plataforma/marcos/core/java/android/view/Gravity.java, me di cuenta de mi error:

No es el mapa de bits imagen que se va a se recortará, pero la vista - el tamaño real del contenedor en el que finalmente se representa la imagen.

Configuración de clip_vertical en mi caso no significaba "recortar la imagen en el borde inferior", significaba "recortar la vista de BitmapDrawable en sí, de modo que su altura coincide con la altura de su contenedor principal" ... lo que provocó la imagen ser "aplastado" ya que llenó esa altura más corta.

Por lo tanto, lo importante para recordar con android: gravedad y android: layout_gravity es que clip_horizontal y clip_vertical aplica a las mediciones de la vista sí mismo, antes de que los contenidos (como mi BitmapDrawable) son prestados.

+0

¡Gracias por tu explicación! Es como si alguien encendiera una luz en un rincón oscuro de mi conocimiento de Android. ¡Aclamaciones! – SlashG

0

tal vez hay ningún efecto porque horizontal no está definido en la android:layout_gravity. clip_vertical es solo una propiedad adicional que se usa además de una propiedad base.

+0

Lo siento, pero si lo escribo como: android: layout_gravity = "top | clip_vertical" Todavía veo que nada ha cambiado –

+0

Necesita obtener su vista en una situación en la que realmente se clip. Sobre todo esto sucede cuando se usa con el administrador de ventanas (qué ventanas se recortarán con la pantalla, etc.). – hackbod

+0

¿Puedes explicar más? –

0

Marca para recortar los bordes del objeto a su contenedor a lo largo del eje horizontal.

check this