Вертикальная линия с использованием XML-drawable
Я пытаюсь понять, как определить вертикальную линию (толщиной 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>
.
У кого-нибудь был такой шанс?
UPDATE
Дело до сих пор не разрешено. Однако,
Для тех, кто находится в креасиде документации на Android, вы можете найти это полезным:
Отсутствует руководство по XML для Android
UPDATE
Я не нашел другого способа, кроме того, который был отмечен как правильный. Он делает трюк, хотя чувствует себя немного "тяжелым", поэтому, если вы случайно знаете ответ, не забудьте поделиться;)
Ответы
Ответ 1
Вместо формы вы можете попробовать 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" />
для горизонтальной линии.
Ответ 2
Вы можете вставить свою фигуру во вращающийся тег.
<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 высотой, вам нужно определить layout_width из 30dp в вашем макете xml. Но конечная ширина также будет 30dp в этом случае, что, вероятно, нежелательно для большинства ситуаций. Это по существу означает, что ширина и высота должны быть одного и того же значения, значение вашей желаемой длины для линии. Я не мог понять, как это исправить.
Это похоже на решение "android way", но если не существует какого-либо исправления или обходного пути для проблемы с размерами, о которой я упоминаю, это вряд ли будет работать для большинства людей. Нам действительно нужен атрибут ориентации в < shape/ > или < ход / > .
Вы также можете попробовать ссылаться на другие доступные в атрибутах поворота теги, например:
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:toDegrees="90"
android:drawable="@drawable/horizontal_line" />
Однако я не тестировал это и ожидал, что у него будут те же проблемы.
- EDIT -
О, я действительно понял, что исправить. Вы можете использовать отрицательный запас в своем макете xml, чтобы избавиться от нежелательного дополнительного пространства.
Например:
<ImageView
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginLeft="-15dp"
android:layout_marginRight="-15dp"
android:src="@drawable/dashed_vertical_line" />
Ответ 3
<?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 height
Ответ 4
Вы можете использовать атрибут 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>
Ответ 5
Я придумал другое решение. Идея состоит в том, чтобы заполнить выталкиваемый сначала цветом, который нравится линии, а затем снова заполнить всю область цветом фона при использовании левой или правой прокладки. Очевидно, что это работает только для вертикальной линии в левом или правом левом направлении.
<?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>
Ответ 6
Я думаю, что это самое простое решение:
<?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>
Ответ 7
Мне нужно было добавить мои представления динамически/программно, поэтому добавление дополнительного представления было бы громоздким. Моя высота просмотра была WRAP_CONTENT, поэтому я не мог использовать решение прямоугольника. Я нашел blog-post здесь о расширении 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);
Надеюсь это поможет.
Ответ 8
его очень просто...
для добавления вертикальной линии в 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"/>
Ответ 9
Зависит от того, где вы хотите иметь вертикальную линию, но если вы хотите, например, вертикальную рамку, у родительского представления есть фон, который может быть выделен пользователем. И вы можете затем определить способ рисования следующим образом:
<?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 с правой стороны представления, которая будет иметь эту возможность в качестве фона.
Ответ 10
Вы можете использовать фигуру, но вместо строки сделать ее прямоугольной.
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"/>
Возможно, вам придется играть с шириной, в зависимости от размера тире, чтобы получить ее в одну строку.
Надеюсь, что это поможет
Приветствия
Ответ 11
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>
..........
.......
......
Ответ 12
<?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>
Ответ 13
Чтобы сделать вертикальную линию, просто используйте прямоугольник шириной 1dp:
<shape>
<size
android:width="1dp"
android:height="16dp" />
<solid
android:color="#c8cdd2" />
</shape>
Не используйте stroke
, используйте solid
(который является цветом заливки), чтобы указать цвет строки.
Ответ 14
Вы должны использовать как это:
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/black" />
Ответ 15
Похоже, никто не упомянул эту опцию:
<?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>
Ответ 16
Я создал RelativeLayout с LinearLayout и View as childs. LinearLayout (я не знаю, может ли это быть RelativeLayout также) содержит представления как обычные, а View - это строка.
Здесь код:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true">
<-- Your views here -->
</LinearLayout>
<View
android:layout_width="1dp"
android:layout_height="fill_parent"
android:background="#000000"
android:layout_alignParentRight="true" />
</RelativeLayout>
Ответ 17
<View
android:layout_width="2dp"
android:layout_height="40dp"
android:background="#ffffff"
android:padding="10dp" />`
Ответ 18
Очень просто, и я думаю, что лучший подход.
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Section Text"
android:id="@+id/textView6"
android:textColor="@color/emphasis"
android:drawableBottom="@drawable/underline"/>
underline.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size android:width="1000dp" android:height="2dp" />
<solid android:color="@color/emphasis"/>
</shape>