studio programacion para móviles multiple libro edición desarrollo curso aplicaciones android drawable xml-layout shapedrawable

android - programacion - Tamaño de dibujo de forma no funciona



multiple root tags (7)

El atributo size de shape proporcionará el valor para drawable.getIntrinsicWidth & getIntrinsicHeight.

si el contenedor del dibujo (por ejemplo, ImageView, TextView) tiene el parámetro de diseño WRAP_CONTENT, entonces la dimensión del contenedor cambiará si cambia el estado de dibujo drawable.

pero hay un error en el marco de Android en la implementación de ImageView drawingState

ImageView solo actualiza / redimensiona su dimensión mediante la dimensión dibujable en state_selected pero no en state_activated

Tengo una forma muy simple de la que quiero establecer el ancho de:

<shape android:shape="rectangle"> <solid android:color="@color/orange"/> <size android:width="2dp"/> </shape>

Sin embargo, cuando asigno esto al fondo de un EditText, solo muestra un fondo naranja en lugar de un rectángulo de ancho 2dp. ¿Por qué no está configurando el tamaño de trabajo? Quiero crear un dibujable transparente con un rectángulo naranja en el lado izquierdo. También tengo esto envuelto en un selector:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true"> <shape android:shape="rectangle"> <solid android:color="@color/orange"/> <size android:width="2dp" android:height="6dp"/> </shape> </item> <item> <shape android:shape="rectangle"> <solid android:color="@android:color/transparent"/> </shape> </item> </selector>

He intentado agregar altura solo para ver si cambiaría el tamaño. No lo hace Es como si estuviera ignorando completamente el tamaño. WTF?


Encontré que la lista de capas era muy tortuosa por primera vez en Androider debido a lo siguiente. A primera vista, la mayoría pensaría que los atributos superior, inferior, derecho e izquierdo del elemento son DESDE la parte superior, inferior, derecha, izquierda. Donde un valor de lo siguiente:

<item android:top="10dp">

Le obtendría un punto de partida de 10dp desde la parte superior del contenedor correspondiente. Este no es el caso. Piense en ello como FUERA DE la parte superior, inferior, derecha, izquierda. <item android:top="10dp"> aún le otorgará un punto de inicio 10dp OFF DE la parte superior, pero ¿qué sucede cuando desea establecer la parte inferior?

<item android:bottom="20dp">

Esto no le permitirá obtener una parte inferior a 20dp desde el TOP, sino una parte inferior de 20dp OFF OF BOTTOM del contenedor.

Así, por ejemplo, con un contenedor de 100dp, si desea un rectángulo con un borde superior que comienza en 20dp y un borde inferior en 40dp:

<item android:top="20" android:bottom="60dp">


Para mí, establecer la gravedad del elemento en "centro" resolvió el problema. Por ejemplo:

<item android:id="@android:id/progress" android:gravity="center"> <clip> <shape> <size android:height="2dp"/> <solid android:color="@color/my_color"/> </shape> </clip> </item>


Puede funcionar con un foreground . Parece que no se puede establecer la gravedad de un fondo. Pero puedes en un primer plano. Revisé API 21, 23 y 24 (bueno, con la vista previa de diseño de Studio) y lo siguiente coloca un punto de círculo sólido en el ImageView.

<shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/colorPrimary" /> <size android:height="8dp" android:width="8dp" /> </shape>

Con el fragmento de diseño

<ImageView android:foreground="@drawable/list_new_dot" android:foregroundGravity="right|center_vertical" tools:src="@drawable/model_1_sm" />

ACTUALIZACIÓN : Si bien parece que funciona en la herramienta de diseño de diseño, no se ve igual en el emulador. ACTUALIZACIÓN 2 : Ya que esta respuesta tiene algunos votos, es posible que desee verificar lo que realmente usé para mostrar un nuevo punto indicador: https://gist.github.com/CapnSpellcheck/4d4638aefd085c703b9d990a21ddc1eb


Solo para especificar la respuesta del usuario 983447: el atributo de tamaño realmente significa una proporción. Debería establecer el tamaño para todas las formas en su lista de capas y se usará como proporción cuando se escala, como el atributo LinearLayout de LinearLayout . Así que es mejor nombrarlo no un size sino un weight

A continuación se muestra una solución alternativa para implementar líneas blancas superiores e inferiores sin utilizar el atributo de size :

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <solid android:color="#fff" /> </shape> </item> <item android:top="1dp" android:bottom="1dp"> <shape> <solid android:color="#888" /> </shape> </item> </layer-list>


Tuve un problema similar.

La documentación ( http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape ) dice:

<tamaño>

El tamaño de la forma. (...)

Nota: La forma se ajusta al tamaño de la vista del contenedor de forma proporcional a las dimensiones definidas aquí, de forma predeterminada. Cuando usa la forma en un ImageView, puede restringir la escala configurando android: scaleType en "center".

Si entiendo correctamente, significa que la etiqueta "tamaño" no es para establecer el tamaño sino para establecer las proporciones.


usé esto

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <stroke android:color="@color/lgray" android:width="1dip" /> <corners android:bottomLeftRadius="0dip" android:bottomRightRadius="0.1dip" android:topLeftRadius="0dip" android:topRightRadius="0.1dip" /> <solid android:color="@color/White" /> </shape>

ponga este rectangle.xml en drawable.y establezca el fondo de su vista.