web-dev-qa-db-ja.com

XMLのドロアブルを使用した縦線

私は、ドロアブルとして使用される垂直線(太さ1dp)を定義する方法を見つけようとしています。

水平のものを作るには、かなり簡単です:

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

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

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

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

UPDATE

ケースはまだ解決されていません。ただし、Androidドキュメンテーションクルセードに参加している人にとっては、これは便利です。Android XMLマニュアルがありません

UPDATE

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

138
Kaspa

形状の代わりに、Viewを試すことができます。

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

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

つかいます:

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

水平線の場合。

351
CommonsWare

回転タグ内に形状をネストできます。

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

これは「Androidの方法」のソリューションのように見えますが、私が言及したディメンションの問題に何らかの修正または回避策がない限り、これはほとんどの人にとっておそらく機能しません。本当に必要なのは、<shape />または<stroke />の方向属性です。

また、次のような回転タグの属性で別のドロウアブルを参照することもできます。

<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" />
96
cephus
<?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の高さでサイズを固定します

16
logcat

Rotate属性を使用できます

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

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

<?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>
10
Eric Kok

その非常に単純な... Android xmlに垂直線を追加するには...

<View
Android:layout_width="fill_parent"
Android:layout_height="1dp"
Android:layout_marginTop="5dp"
Android:rotation="90"
Android:background="@Android:color/darker_gray"/>
4
user3130068

ビューを動的/プログラムで追加する必要があったため、追加のビューを追加するのは面倒でした。ビューの高さはWRAP_CONTENTだったため、長方形のソリューションを使用できませんでした。私はブログ投稿を見つけました here 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(startX, startY, stopX, stopY, Paint)であるため、ビューの任意の方向に任意の直線を描画できます。それから私の活動ではNoteTextView note = new NoteTextView(this);があります。これが役に立てば幸いです。

4
willlma

依存します。垂直線を配置したい場所ですが、たとえば垂直境界線が必要な場合は、親ビューにカスタム描画可能な背景を持たせることができます。そして、次のようにドロウアブルを定義できます:

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

この例では、ビューの右側に1dpの細い黒い線を作成し、このドローアブルを背景として使用します。

2
Lukas1

私はこれが最も簡単な解決策だと思う:

<?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>
2
a.ch.
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>

    ..........
    .......
    ......
1
YasirAzgar

図形を使用できますが、線の代わりに長方形にします。

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

そして、あなたのレイアウトでこれを使用してください...

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

ダッシュのサイズに応じて、幅を1行にするために幅を調整する必要がある場合があります。

これが乾杯を願っています

1
Boxlady

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

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

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

0
David Wasser
<?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>
0
AnupamChugh