使用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文档讨伐的人 - 你可能会发现这个有用: 的 缺少的Android XML手册 强>
<强>更新强>
我发现比一个我标记为正确其他没有别的办法。它做的伎俩,虽然感觉有点“重”,因此,如果您知道答案不要忘记份额;)
解决方案
相反的形状,你可以尝试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定义将用于绘制原来的形状的尺寸的布局PARAMS。如果你希望你的线是30DP高大的意思是,你需要在你的布局XML来定义的一个30DP layout_width。但最终宽度也将30DP在这种情况下,这是大多数情况下可能不理想。这基本上意味着宽度和高度必须是相同的值,为对线的期望长度的值。我无法弄清楚如何解决这个问题。
这似乎是“Android的方式”解决方案,但除非有一些补丁或解决方法维度发出我提到那么这可能不会对大多数人的工作。我们真正需要的是一个方向属性<形状/>或<中风/>.
您也可以尝试引用了旋转标签的属性另一绘制,如:
<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的参数是drawLine(startX, startY, stopX, stopY, paint)
以便可以在整个视图中的任何方向绘制任何直线。
然后在我的活动我有
NoteTextView note = new NoteTextView(this);
希望这可以帮助。
其非常简单... 添加在机器人的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" />`