Вертикальная линия с использованием XML Drawable
-
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, будут измерениями, используемыми для рисования исходной формы. Это означает, что если вы хотите, чтобы ваша строка была ростом 30 дюймов, вам нужно определить Layout_width 30DP в вашем макете XML. Но окончательная ширина также будет 30 д.п в этом случае, что, вероятно, нежелательна для большинства ситуаций. Это по существу означает, что как ширина, так и высота должны быть одинаковым значением, значением желаемой длины для линии. Я не мог понять, как это исправить.
Это, кажется, является решением «Android Way», но если нет никаких исправлений или обходных путей для выпуска измерений, я упоминаю, что это, вероятно, не будет работать для большинства людей. Что нам действительно нужно, это атрибут ориентации вu003Cshape/> илиu003Cstroke/> Отказ
Вы также можете попробовать ссылку на другую кнопку «Действительно» в атрибутах Rotate Tag, таких как:
<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" />`