180

ドローアブルとして使用する垂直線 (1 dp の太さ) を定義する方法を理解しようとしています。

水平方向のものを作成するには、非常に簡単です。

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

問題は、この線を垂直にする方法です。

はい、1 ピクセルの厚さの長方形を描画するなどの回避策がありますが、複数の<item>要素で構成される場合、描画可能な XML が複雑になります。

誰でもこれでチャンスがありましたか?

アップデート

ケースはまだ未解決です。ただし、Android ドキュメントの十字軍にいる人にとっては、これが役立つかもしれません: Missing Android XML Manual

アップデート

正しいとマークした方法以外に方法は見つかりませんでした。少し「重い」と感じますが、うまくいきます。したがって、たまたま答えを知っている場合は、共有することを忘れないでください ;)

4

18 に答える 18

426

形の代わりに、あなたは:を試すことができViewます

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

私はこれを水平線にのみ使用しましたが、垂直線にも機能すると思います。

使用する:

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

水平線の場合。

于 2010-04-17T16:08:41.597 に答える
120

回転タグ内にシェイプをネストできます。

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

ただし、唯一の問題は、レイアウト xml で定義されたレイアウト パラメータが、元の形状の描画に使用される寸法になることです。つまり、行の高さを 30 dp にしたい場合は、レイアウト xml で 30 dp の layout_width を定義する必要があります。ただし、その場合、最終的な幅も 30 dp になり、ほとんどの状況では望ましくない可能性があります。これは基本的に、幅と高さの両方が同じ値である必要があることを意味します。これは、線に必要な長さの値です。これを修正する方法がわかりませんでした。

これは「Android 方式」のソリューションのようですが、私が言及したサイズの問題に対する何らかの修正または回避策がない限り、これはほとんどの人にとって機能しない可能性があります。本当に必要なのは、<shape/> または <stroke/> の方向属性です。

次のように、rotate タグの属性で別のドローアブルを参照することもできます。

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

ただし、私はこれをテストしておらず、同じ問題があると予想しています。

- 編集 -

ああ、私は実際に修正を考え出しました。レイアウト xml で負のマージンを使用して、不要な余分なスペースを取り除くことができます。そのような:

<ImageView
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_marginLeft="-15dp"
    android:layout_marginRight="-15dp"
    android:src="@drawable/dashed_vertical_line" />
于 2010-09-22T20:56:44.630 に答える
23

回転属性を使用できます

 <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>
于 2015-03-17T06:00:57.630 に答える
16
<?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>

仕事は私のためです。fill_parent または dp 高さの固定サイズでビューの背景として配置します

于 2012-09-08T12:43:31.840 に答える
12

私は別の解決策を思いつきました。アイデアは、最初にドローアブルを線の好きな色で塗りつぶし、次に左または右のパディングを使用しながら、領域全体を背景色で再度塗りつぶすことです。明らかに、これはドローアブルの左端または右端の垂直線に対してのみ機能します。

<?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>
于 2013-06-27T15:13:57.723 に答える
5

ビューを動的/プログラム的に追加する必要があったため、ビューを追加するのは面倒でした。私のビューの高さは WRAP_CONTENT だったので、長方形のソリューションを使用できませんでした。ここでTextView の拡張、onDraw() のオーバーライド、ラインでのペイントに関するブログ投稿を見つけたので、それを実装したところ、うまく機能しました。以下の私のコードを参照してください:

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);
    }
}

左側に垂直線が必要でしたが、drawline パラメーターはdrawLine(startX, startY, stopX, stopY, paint)、ビュー全体の任意の方向に任意の直線を描画できるようにするためのものです。それから私の活動では、 NoteTextView note = new NoteTextView(this); これが役立つことを願っています。

于 2013-01-21T13:24:25.987 に答える
1
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>

    ..........
    .......
    ......
于 2014-05-15T13:00:56.967 に答える
0

垂直線を作成するには、幅が 1 dp の長方形を使用します。

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

を使用せずstrokesolid(「塗りつぶし」の色) を使用して線の色を指定します。

于 2017-11-08T17:28:40.227 に答える