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


Ich versuche, eine einfache Drawable zu erstellen, die ich als Hintergrund für eine Ansicht festlegen möchte (mit setBackgroundDrawable). Ich möchte einfach den Hintergrund des Drawable in 2 gleiche Rechtecke (50% - 50%) teilen, die erste will mit Schwarz gefüllt sein, die 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 Zeichnungs-XML-Definitionsdatei eine Breite von 50% hat? 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.


22
2018-05-19 15:52


Ursprung


Antworten:


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 von mir)

Muss ein Dimensionswert seinDies ist eine Fließkommazahl, 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 für jeden Dimensionstyp finden Sie unter: http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

Sie müssen ein eigenes Attribut erstellen (siehe stilgerecht) und führe die Berechnungen selbst durch onDraw(...).

Sehen Sie diese zwei Fragen und die darin enthaltenen Links für Beispiele:


10
2018-05-19 16:02



android: layout_weight = ". 20" ist die beste prozentuale Implementierung

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

5
2018-03-04 09:20



Es gibt keine echte Prozenteinstellung, aber Sie könnten sich nähern.

Es scheint, als wäre der einfachste Weg, dies zu erreichen, ein Bild als Hintergrund zu verwenden und nur ein Schwarz-Weiß-Bild zu machen.

Die einzige andere Art, wie ich etwas aufteilen kann, ist, zwei Ansichten zu verwenden, jede mit ihrer eigenen bg-Farbe, und jeder hat den gleichen positiven Wert für android: layout_weight-Attribut (dh 50/50). Sie werden dann den verfügbaren Platz teilen.

hoffe das hilft!


3
2018-05-19 16:05



Die Art und Weise, wie ich dies getan habe, war, indem ich meine eigene Klasse erstelle, die von RelativeLayout erbt, wo ich die onMeasure-Methode überschreibe. In diesem Stadium ist die Höhe der Ansicht bekannt, also habe ich den Hintergrund abgerufen und den Einsatz der Elemente manuell mit festgelegt setLayerInset.

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

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


2
2017-10-11 14:08



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

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

1
2017-07-03 16:01