studio programacion herramientas fundamentos con avanzado aplicaciones android xml drawable shape

programacion - Android Drawable: ¿Especificar ancho de forma en porcentaje en el archivo XML?



manual de android en pdf (5)

Estoy tratando de crear un Drawable simple que quiera establecer como fondo para una vista (usando setBackgroundDrawable ). Simplemente quiero dividir el fondo del dibujo en 2 rectángulos iguales (50% - 50%), el primer deseo lleno con negro, el segundo con blanco:

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/back_color_1"> <shape android:shape="rectangle"> <solid android:color="#000000" /> </shape> </item> <item android:id="@+id/back_color_2"> <shape android:shape="rectangle"> <solid android:color="#FFFFFF" /> </shape> </item> </layer-list>

¿Cómo puedo especificar que cada forma debe tener un ancho del 50% en el archivo de definición XML dibujable? Algo como android: ancho = "50%" .

(Estoy trabajando en Android 3.0, pero creo que es una pregunta general de Android).

PS: Puedes hacer esto en CSS o XAML.


android: layout_weight = ". 20" es la mejor manera de implementar en porcentaje

<?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" > <TextView android:id="@+id/logTextBox" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight=".20" android:maxLines="500" android:scrollbars="vertical" android:singleLine="false" android:text="@string/logText" > </TextView> </LinearLayout>


La forma en que encontré esto fue creando mi propia clase heredada de RelativeLayout, donde anulo el método onMeasure. En esta etapa, se conoce la altura de la vista, así que busqué el fondo y configuré manualmente la inserción de los elementos usando setLayerInset .

LayerDrawable bg = (LayerDrawable)getBackground(); int h = getMeasuredHeight(); bg.setLayerInset(1, 0, 0, 0, h/2);

Sin embargo, este método es un poco engorroso. En la mayoría de los casos, la respuesta proporcionada por chris debería ser suficiente.


La mejor manera como Swapnil declaró, es usar layout_weight en un LinearLayout. Si vas horizontalmente, establece layout_width en "fill_parent" y luego configura el layout_weight en el porcentaje que desees. Comience con algo como a continuación y juegue con los valores de layout_width para tener una idea de ello (o agregue más vistas solo para obtener una mejor comprensión).

<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation = "horizontal" > <View android:layout_width="fill_parent" android:layout_height="30dip" android:layout_weight="0.5" android:background="#aaffaa" /> <View android:layout_width="fill_parent" android:layout_height="30dip" android:layout_weight="0.5" android:background="#aaaaff" /> </LinearLayout>


no hay una configuración de porcentaje real, pero podría acercarse.

Parece que la forma más fácil de lograrlo es usar una imagen como dibujable en el fondo y simplemente hacer una imagen dividida en blanco y negro.

La única otra manera que conozco para dividir algo es usar 2 vistas, cada una con su propio color bg, y cada una con el mismo valor positivo para el atributo android: layout_weight (es decir, 50/50). luego se dividirán el espacio disponible.

¡espero que esto ayude!


No puedes especificar un porcentaje . Necesitas especificar un valor de Dimensión.

android:width se define aquí: http://developer.android.com/reference/android/R.attr.html#width :

(énfasis mío)

Debe ser un valor de dimensión , que es un número de punto flotante añadido con una unidad como "14.5sp". Las unidades disponibles son: px (píxeles), dp (píxeles independientes de la densidad), sp (píxeles escalados según el tamaño de fuente preferido), en (pulgadas), mm (milímetros).

Para obtener una definición de cada tipo de dimensión, consulte: http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

Necesitará crear su propio atributo (vea styleable ) y realizar los cálculos usted mismo en onDraw(...) .

Vea estas dos preguntas y los enlaces en ellas para ejemplos: