XML描画可能な垂直線
-
27-09-2019 - |
質問
描画可能なものとして使用する垂直線(厚さ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の長方形の形状を描画するなど、回避策がありますが、それが複数で構成されている場合、それは描画可能なXMLを複雑にします <item>
要素。
誰かがこれでチャンスがありましたか?
アップデート
ケースはまだ解決されていません。ただし、AndroidドキュメンテーションのCrusadeを使用している人にとっては、これが便利だと思うかもしれません。Android XMLマニュアルがありません
アップデート
私は正しいとマークしたもの以外に他の方法を見つけませんでした。それはトリックを行いますが、少し「重い」と感じます。したがって、あなたがたまたま答えを知っていれば、共有することを忘れないでください;)
解決
形状の代わりに、aを試すことができます 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" />
水平線の場合。
他のヒント
回転タグの中に形をネストすることができます。
<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 Way」ソリューションのようですが、私が言及したディメンションの問題の修正または回避策がない限り、これはほとんどの人にとってうまくいかないでしょう。本当に必要なのは、オリエンテーション属性ですu003Cshape/>またu003Cstroke/>。
また、次のような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" />
<?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高さの固定サイズで視界の背景としてそれを置く
回転属性を使用できます
<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>
別の解決策を思いつきました。アイデアは、最初に描画可能な色を、ラインが好きな色で埋め、左または右のパディングを使用している間、領域全体を背景色で再び満たすことです。明らかに、これは描画可能な左端または右側の垂直線でのみ機能します。
<?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>
これが最も簡単な解決策だと思います。
<?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>
動的/プログラム的にビューを追加する必要があったので、追加のビューを追加するのは面倒だったでしょう。私のビューの高さは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(startX, startY, stopX, stopY, paint)
したがって、ビュー全体に任意の方向に直線を描くことができます。それから私の活動で私は持っていますNoteTextView note = new NoteTextView(this);
お役に立てれば。
その非常にシンプル... 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"/>
垂直線が必要な場所に依存しますが、たとえば垂直境界が必要な場合は、親ビューに背景をカスタム描画可能にすることができます。そして、あなたは次のように描画可能なものを定義することができます:
<?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の薄い黒い線が作成されます。これは、背景として描画可能です。
形状を使用できますが、線の代わりに長方形にします。
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"/>
ダッシュのサイズに応じて、幅を単一のラインに入れる必要がある場合があります。
これが歓声に役立つことを願っています
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>
垂直線を作成するには、1dpの幅の長方形を使用するだけです。
<shape>
<size
android:width="1dp"
android:height="16dp" />
<solid
android:color="#c8cdd2" />
</shape>
使用しないでください stroke
, 、 使用する solid
(これは「塗りつぶし」色です)ラインの色を指定します。
誰もこのオプションについて言及していないようです:
<?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" />`