Frage

Ich versuche, herauszufinden, wie eine vertikale Linie zu definieren (1 dp dick) als ziehbar verwendet werden.

Um einen horizontalen zu machen, ist es ziemlich einfach:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
    <stroke android:width="1dp" android:color="#0000FF"/>
    <size android:height="50dp" />     
</shape>

Die Frage ist, wie diese Linie senkrecht machen?

Ja, es gibt Workarounds, wie eine rechteckige Form 1px dick zeichnen, aber das erschwert die ziehbar XML, wenn es von mehreren <item> Elementen besteht.

Jeder hatte eine Chance, mit diesem?

UPDATE

Case ist nach wie vor ungelöst. Jedoch, Für alle, auf einem Android-Dokumentation Kreuzzug - Sie könnten diesen Kommentar hilfreich: Fehlende Android XML-Handbuch

UPDATE

fand ich keine andere Möglichkeit, andere als die, dass ich als richtig gekennzeichnet. Es funktioniert der Trick allerdings fühlt sich ein bisschen „schwer“, also wenn Sie die Antwort wissen passieren vergessen Sie nicht, zu teilen;)

War es hilfreich?

Lösung

Statt einer Form, könnten Sie eine View versuchen:

<View
    android:layout_width="1dp"
    android:layout_height="fill_parent"
    android:background="#FF0000FF" />

Ich habe dies für horizontale Linien nur dann verwendet, aber ich würde denken, dass es auch für vertikale Linien funktionieren würde.

Verwendung:

<View
    android:layout_width="fill_parent"
    android:layout_height="1dp"
    android:background="#FF0000FF" />

für eine horizontale Linie.

Andere Tipps

Sie können Nest Ihre Form in einem Dreh-Tag.

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="90"
    android:toDegrees="90">
    <shape 
        android:shape="line">
        <stroke
            android:width="1dp"
            android:color="#ff00ff"
            android:dashWidth="1dp"
            android:dashGap="2dp" />
    </shape>
</rotate>

Doch das Problem ist nur das Layout params in Ihrem Layout XML definiert wird die Dimensionen verwendet werden, die ursprüngliche Form zu zeichnen. Bedeutung, wenn Sie Ihre Linie sein wollen 30DP groß, benötigen Sie einen layout_width von 30DP in Ihrem Layout XML zu definieren. Aber die endgültige Breite wird auch in diesem Fall sein 30DP, die für die meisten Situationen wahrscheinlich unerwünscht ist. Dies bedeutet im Wesentlichen, Breite und Höhe auf den gleichen Wert sein haben, den Wert der gewünschten Länge für die Linie. Ich kann nicht herausfinden, wie diese zu beheben.

Dies scheint die „Android-way“ Lösung zu sein, aber es sei denn, es gibt einige fix oder Abhilfe für die Dimensionen Ausgabe ich schon erwähnt, dann wahrscheinlich das wird nicht funktionieren für die meisten Menschen. Was wir wirklich brauchen, ist eine Orientierung Attribut in

oder .

Sie können auch versuchen, eine andere ziehbar in den Rotieroperationen Tag-Attribute verweisen, wie zum Beispiel:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="90"
    android:toDegrees="90"
    android:drawable="@drawable/horizontal_line" />

Allerdings habe ich nicht getestet und erwarten, dass es die gleichen Probleme haben.

- EDIT -

Oh, ich dachte eigentlich ein Update aus. Sie können eine negative Marge in Ihrem Layout XML verwenden, die Beseitigung der unerwünschten zusätzlichen Platz zu bekommen. Wie zum Beispiel:

<ImageView
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_marginLeft="-15dp"
    android:layout_marginRight="-15dp"
    android:src="@drawable/dashed_vertical_line" />
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle" >
    <stroke android:width="1dp" android:color="@color/white" />
    <size android:width="2dp" />
</shape>

Arbeit für mich. Legen Sie es als Hintergrund Sicht mit fill_parent oder fest in dp Höhe so bemessen,

Sie können das Drehen-Attribut

 <item>
    <rotate
        android:fromDegrees="90"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%" >
        <shape
            android:shape="line"
            android:top="1dip" >
            <stroke
                android:width="1dip"
                 />
        </shape>
    </rotate>
</item>

Ich kam mit einer anderen Lösung auf. Die Idee ist es, die ziehbar zunächst mit der Farbe zu füllen, dass Sie wie die Linie wieder den gesamten Bereich zu sein, und dann füllen sich mit der Hintergrundfarbe, während nach links oder rechts padding verwenden. Offensichtlich funktioniert dies nur für eine senkrechte Linie ganz links oder rechts vom ziehbar.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@color/divider_color" />
    <item android:left="6dp" android:drawable="@color/background_color" />
</layer-list>

Ich denke, dies ist die einfachste Lösung ist:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:gravity="center">
        <shape android:shape="rectangle">
            <size android:width="1dp" />
            <solid android:color="#0000FF" />
        </shape>
    </item>

</layer-list>

Ich brauchte meine Ansichten dynamisch hinzufügen / programmatisch, so dass eine zusätzliche Ansicht Zugabe umständlich gewesen wäre. Meine Ansicht Höhe war WRAP_CONTENT, so dass ich nicht die Rechteck-Lösung nutzen könnte. Ich fand ein Blog-post hier über Textview erstreckt, zwingende OnDraw () und in der Linie zu malen, so implementiert, dass ich und es funktioniert gut. Sehen Sie meinen Code unten:

public class NoteTextView extends TextView {
    public NoteTextView(Context context) {
       super(context);
    }
    private Paint paint = new Paint();
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(Color.parseColor("#F00000FF"));
        paint.setStrokeWidth(0);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawLine(0, 0, 0, getHeight(), paint);
    }
}

ich brauchte eine vertikale Linie auf der linken Seite, aber die DrawLine Parameter sind drawLine(startX, startY, stopX, stopY, paint) so dass Sie jede gerade Linie in jede Richtung über die Ansicht ziehen. Dann in meiner Tätigkeit habe ich NoteTextView note = new NoteTextView(this); Hoffe das hilft.

seine sehr einfach ... eine vertikale Linie in android xml ...

hinzufügen
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:rotation="90"
android:background="@android:color/darker_gray"/>

Hängt, wo Sie die vertikale Linie haben wollen, aber wenn Sie eine vertikale Grenze zum Beispiel möchten, können Sie die übergeordnete Sicht haben haben einen Hintergrund eine benutzerdefinierte ziehbar. Und Sie können dann definieren die ziehbar wie folgt aus:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape
            android:shape="rectangle">
            <stroke android:width="1dp" android:color="#000000" />
            <solid android:color="#00ffffff" />

        </shape>
    </item>

    <item android:right="1dp">
        <shape android:shape="rectangle">
            <solid android:color="#00ffffff" />
        </shape>
    </item>

</layer-list>

In diesem Beispiel wird eine 1 dp dünne schwarze Linie auf der rechten Seite der Ansicht erstellen, das wird dieses ziehbar als Hintergrund.

Sie kann eine Form verwenden, aber anstelle einer Linie macht es Rechteck.

android:shape="rectangle">
<stroke
    android:width="5dp"
    android:color="#ff000000"
    android:dashGap="10px"
    android:dashWidth="30px" />

und in Ihrem Layout verwenden diese ...

<ImageView
    android:layout_width="7dp"
    android:layout_height="match_parent"
    android:src="@drawable/dashline"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layerType="software"/>

Sie müssen möglicherweise mit der Breite spielen, abhängig von der Größe des Strichs, es in eine einzige Zeile zu erhalten.

Hope, das hilft Prost

add this in your styles.xml

        <style name="Divider">
            <item name="android:layout_width">1dip</item>
            <item name="android:layout_height">match_parent</item>
            <item name="android:background">@color/divider_color</item>
        </style>

        <style name="Divider_invisible">
            <item name="android:layout_width">1dip</item>
            <item name="android:layout_height">match_parent</item>
        </style>

then wrap this style in a linear layout where you want the vertical line, I used the vertical line as a column divider in my table. 

     <TableLayout
                android:id="@+id/table"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:stretchColumns="*" >

                <TableRow
                    android:id="@+id/tableRow1"
                    android:layout_width="fill_parent"
                    android:layout_height="match_parent"
                    android:background="#92C94A" >

                    <TextView
                        android:id="@+id/textView11"
                        android:paddingBottom="10dp"
                        android:paddingLeft="5dp"
                        android:paddingRight="5dp"
                        android:paddingTop="10dp" />
    //...................................................................    

                    <LinearLayout
                        android:layout_width="1dp"
                        android:layout_height="match_parent" >

                        <View style="@style/Divider_invisible" />
                    </LinearLayout>
        //...................................................................
                    <TextView
                        android:id="@+id/textView12"
                        android:paddingBottom="10dp"
                        android:paddingLeft="5dp"
                        android:paddingRight="5dp"
                        android:paddingTop="10dp"
                        android:text="@string/main_wo_colon"
                        android:textColor="@color/white"
                        android:textSize="16sp" />
  //...............................................................  
                    <LinearLayout
                        android:layout_width="1dp"
                        android:layout_height="match_parent" >

                        <View style="@style/Divider" />
                    </LinearLayout>

    //...................................................................
                    <TextView
                        android:id="@+id/textView13"
                        android:paddingBottom="10dp"
                        android:paddingLeft="5dp"
                        android:paddingRight="5dp"
                        android:paddingTop="10dp"
                        android:text="@string/side_wo_colon"
                        android:textColor="@color/white"
                        android:textSize="16sp" />

                    <LinearLayout
                        android:layout_width="1dp"
                        android:layout_height="match_parent" >

                        <View style="@style/Divider" />
                    </LinearLayout>

                    <TextView
                        android:id="@+id/textView14"
                        android:paddingBottom="10dp"
                        android:paddingLeft="5dp"
                        android:paddingRight="5dp"
                        android:paddingTop="10dp"
                        android:text="@string/total"
                        android:textColor="@color/white"
                        android:textSize="16sp" />
                </TableRow>

                <!-- display this button in 3rd column via layout_column(zero based) -->

                <TableRow
                    android:id="@+id/tableRow2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="#6F9C33" >

                    <TextView
                        android:id="@+id/textView21"
                        android:padding="5dp"
                        android:text="@string/servings"
                        android:textColor="@color/white"
                        android:textSize="16sp" />

                    <LinearLayout
                        android:layout_width="1dp"
                        android:layout_height="match_parent" >

                        <View style="@style/Divider" />
                    </LinearLayout>

    ..........
    .......
    ......
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:bottom="-3dp"
        android:left="-3dp"
        android:top="-3dp">

        <shape android:shape="rectangle">
            <solid android:color="@color/colorPrimary" />
            <stroke
                android:width="2dp"
                android:color="#1fc78c" />
        </shape>

    </item>

</layer-list>

Um eine vertikale Linie zu machen, verwenden Sie einfach ein Rechteck mit einer Breite von 1 dp:

<shape>
    <size
        android:width="1dp"
        android:height="16dp" />
    <solid
        android:color="#c8cdd2" />
</shape>

Verwenden Sie stroke nicht, verwenden solid (das ist die „Füllung“ Farbe), um die Farbe der Linie angeben.

Es sieht aus wie niemand diese Option erwähnt:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@color/white" android:width="1dp"/>
</layer-list>
 <View
        android:layout_width="2dp"
        android:layout_height="40dp"

        android:background="#ffffff"
        android:padding="10dp" />`
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top