J'essaie de créer un Drawable simple que je veux définir comme arrière-plan pour une vue (avec setBackgroundDrawable ). Je veux simplement diviser le fond du dessinable en 2 rectangles égaux (50% - 50%), le premier veux rempli de noir, le second de blanc:
<?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>
Comment puis-je spécifier que chaque forme doit avoir une largeur de 50% dans le fichier de définition XML dessinable? Quelque chose comme Android: width = "50%" .
(Je travaille sur Android 3.0, mais je pense que c'est une question générale sur Android.)
P.S: Vous pouvez le faire en CSS ou en XAML.
Vous ne pouvez pas spécifier de pourcentage . Vous devez lui spécifier une valeur de dimension.
Android:width
est défini ici: http://developer.Android.com/reference/Android/R.attr.html#width :
(c'est moi qui souligne)
Doit être une valeur de dimension , qui est un nombre à virgule flottante ajouté à une unité telle que "14.5sp". Les unités disponibles sont: px (pixels), dp (pixels indépendants de la densité), sp (pixels redimensionnés en fonction de la taille de police préférée), in (pouces), mm (millimètres).
Pour une définition de chaque type de dimension, voir: http://developer.Android.com/guide/topics/resources/more-resources.html#Dimension
Vous devrez créer votre propre attribut (voir styleable ) et effectuer les calculs vous-même dans onDraw(...)
.
Voir ces deux questions et les liens qui y figurent pour des exemples:
Android: layout_weight = ". 20" est la meilleure façon de mettre en œuvre en pourcentage
<?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>
il n'y a pas de vrai pourcentage, mais vous pourriez vous en approcher.
pour ce faire, il semble que le moyen le plus simple consiste à utiliser une image comme dessin d’arrière-plan et à créer une image fractionnée en noir et blanc.
le seul autre moyen que je connaisse pour scinder quelque chose consiste à utiliser 2 vues, chacune avec sa propre couleur bg, et chacune ayant la même valeur positive pour Android: attribut layout_weight (c'est-à-dire 50/50). ils se partageront ensuite l'espace disponible.
j'espère que cela t'aides!
Pour ce faire, j'ai créé ma propre classe héritant de RelativeLayout, dans laquelle je substitue la méthode onMeasure. À ce stade, la hauteur de la vue est connue, j'ai donc récupéré l'arrière-plan et défini manuellement l'encart des éléments à l'aide de setLayerInset .
LayerDrawable bg = (LayerDrawable)getBackground();
int h = getMeasuredHeight();
bg.setLayerInset(1, 0, 0, 0, h/2);
Cette méthode est cependant un peu lourde. Dans la plupart des cas, la réponse fournie par chris devrait suffire.
Comme indiqué dans swapnil, la meilleure solution consiste à utiliser layout_weight dans LinearLayout. Si vous optez pour une orientation horizontale, définissez layout_width sur "fill_parent", puis définissez-le sur un pourcentage souhaité. Commencez avec quelque chose comme ci-dessous et jouez avec les valeurs layout_width pour en avoir une idée (ou ajoutez d'autres vues pour avoir une meilleure compréhension).
<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>