Android Drawable: spécifier la largeur de la forme en pourcentage dans le fichier XML?
j'essaie de créer un simple Drawable que je veux mettre comme arrière-plan pour une vue (en utilisant setBackgroundDrawable ). Je veux simplement diviser le fond du tirable en 2 rectangles égaux (50% - 50%), le premier vouloir rempli de noir, le second avec 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 étirable? Quelque chose comme android: width= " 50%" .
(je travaille sur Android 3.0, mais je pense que c'est une question générale Android.)
P. S: Vous pouvez le faire en CSS ou XAML.
5 réponses
vous ne pouvez pas spécifier un pourcentage . Vous devez spécifier une valeur de Dimension.
android:width
est défini ici: http://developer.android.com/reference/android/R.attr.html#width :
(l'emphase est mienne)
Doit être une valeur de dimension , qui est un nombre à virgule flottante ajouté avec une unité telle que "14.5 sp". Les unités disponibles sont: px (pixels), dp (indépendante de la densité de pixels), sp (mise à l'échelle des pixels en fonction préférée pour la taille de la police), en (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 vous-même les calculs dans onDraw(...)
.
voir ces deux questions et les liens qui s'y trouvent pour des exemples:
android:layout_weight=".20" est la meilleure façon de mettre 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 réglage de pourcentage, mais vous pourriez vous rapprocher.
il semble que la façon la plus facile d'y parvenir est d'utiliser une image comme fond de dessin et juste faire une image en noir et blanc.
la seule autre façon que je sais de diviser quoi que ce soit est d'utiliser 2 vues, chacune avec sa propre couleur bg, et chaque donné la même valeur positive pour android:layout_weight attribut (ie. 50/50). ils seront alors diviser l'espace disponible.
espérons que cette aide!
la façon dont j'ai trouvé à faire ceci était en créant ma propre classe héritant de RelativeLayout, où je surpasse la méthode onMeasure. À ce stade, la hauteur de la vue est connu, donc je suis allé chercher le fond, et régler manuellement l'insertion des éléments en utilisant setLayerInset .
LayerDrawable bg = (LayerDrawable)getBackground();
int h = getMeasuredHeight();
bg.setLayerInset(1, 0, 0, 0, h/2);
Cette méthode est un peu lourd. Dans la plupart des cas, la réponse fournie par chris devrait être suffisant.
la meilleure façon comme swapnil déclaré, est d'utiliser layout_weight dans une LinearLayout. Si vous allez horizontalement, définissez layout_width à "fill_parent" puis définissez layout_weight à un pourcentage que vous voulez. Commencez par quelque chose comme ci-dessous et jouez avec les valeurs layout_width pour en avoir une idée (ou ajoutez plus de vues juste 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>