it-swarm.com.de

Android Drawable: Angabe der Formbreite in Prozent in der XML-Datei?

Ich versuche, ein einfaches Drawable zu erstellen, das ich als Hintergrund für eine Ansicht festlegen möchte (mithilfe von setBackgroundDrawable ). Ich möchte einfach den Hintergrund der Zeichenfläche in 2 gleiche Rechtecke (50% - 50%) aufteilen, wobei das erste mit Schwarz gefüllt sein soll, das zweite mit Weiß:

<?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>

Wie kann ich festlegen, dass jede Form in der darstellbaren XML-Definitionsdatei eine Breite von 50% haben soll? So etwas wie Android: width = "50%" .

(Ich arbeite an Android 3.0, aber ich denke, es ist eine allgemeine Android-Frage.)

PS: Sie können dies in CSS oder XAML tun.

23
Alex Vang

Sie können keinen Prozentsatz angeben . Sie müssen einen Dimensionswert angeben. 

Android:width ist hier definiert: http://developer.Android.com/reference/Android/R.attr.html#width :

(Hervorhebung meines)

Muss ein Dimensionswert sein . Hierbei handelt es sich um eine Gleitkommazahl, an die eine Einheit wie "14.5sp" angehängt ist. Verfügbare Einheiten sind: px (Pixel), dp (dichteunabhängige Pixel), sp (skalierte Pixel basierend auf der bevorzugten Schriftgröße), in (Zoll), mm (Millimeter). 

Eine Definition der einzelnen Dimensionstypen finden Sie unter: http://developer.Android.com/guide/topics/resources/more-resources.html#Dimension

Sie müssen ein eigenes Attribut erstellen (siehe styleable ) und die Berechnungen selbst in onDraw(...) durchführen.

Siehe diese beiden Fragen und die Links darin für Beispiele:

10
Aleadam

Android: layout_weight = ". 20" ist am besten in Prozent zu implementieren

<?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>
3
Swapnil Kotwal

es gibt keine wahren Prozentwerte, aber Sie kommen vielleicht näher.

es scheint, als wäre dies am einfachsten, wenn Sie ein Bild als Hintergrund zeichnen und nur ein Schwarzweißbild verwenden.

die einzige andere Möglichkeit, etwas aufzuteilen, besteht darin, zwei Ansichten zu verwenden, jede mit einer eigenen Farbe für den Hintergrund und jeweils den gleichen positiven Wert für Android: layout_weight-Attribut (dh 50/50). Sie teilen dann den verfügbaren Speicherplatz auf.

hoffe das hilft!

3
chris

Ich fand das, indem ich meine eigene Klasse erstellte, die von RelativeLayout erbte, wo ich die onMeasure-Methode überschreibe. Zu diesem Zeitpunkt ist die Höhe der Ansicht bekannt. Daher habe ich den Hintergrund abgerufen und die Einfügung der Elemente mithilfe von setLayerInset manuell festgelegt.

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

Diese Methode ist jedoch etwas umständlich. In den meisten Fällen sollte die Antwort von chris ausreichend sein.

2
Skymt

Wie swapnil feststellte, ist die beste Methode die Verwendung von layout_weight in einem LinearLayout. Wenn Sie horizontal gehen, setzen Sie layout_width auf "fill_parent" und dann layout_weight auf einen gewünschten Prozentsatz. Beginnen Sie mit etwas wie unten und spielen Sie mit den layout_width-Werten, um ein Gefühl dafür zu bekommen (oder fügen Sie weitere Ansichten hinzu, um ein besseres Verständnis zu erreichen).

<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>
0
ajacian81