Вертикальная линия с использованием 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> элементы.
у кого-нибудь возможность с это?
обновление
дело до сих пор не раскрыто. Однако,
Для тех, кто на Android документации крестовый поход - вы можете найти это полезным:
отсутствует Android XML руководство
обновление
Я не нашел другого способа, кроме того, который я отметил как правильный. Он делает трюк, хотя чувствует себя немного "тяжелым", поэтому, если вы случайно знаете ответ, Не забудьте поделиться ;)
15 ответов:
вместо формы, вы можете попробовать
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, вам нужно определить layout_width 30dp в вашем XML-макете. Но конечная ширина также будет 30dp в этом случае, что, вероятно, нежелательно для большинства ситуаций. Это по существу означает, что ширина и высота должны быть одинаковыми, значение желаемой длины для линии. Я не мог понять, как это исправить.
это, кажется, решение "android way", но если нет какого-то исправления или обходного пути для проблемы размеров, о которой я упоминаю, то это, вероятно, не будет работать для большинства людей. Что нам действительно нужно, так это атрибут ориентации в
или . вы также можете попробовать ссылаться на другой drawable в атрибутах тега поворота, таких как:
<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" />
<?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
вы можете использовать атрибут 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>
Я придумал другое решение. Идея состоит в том, чтобы сначала заполнить рисование цветом, который вам нравится, чтобы линия была, а затем снова заполнить всю область цветом фона при использовании левого или правого отступа. Очевидно, это работает только для вертикальной линии в левой или правой части рисунков.
<?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>
мне нужно было добавить свои представления динамически / программно, поэтому добавление дополнительного представления было бы громоздким. Моя высота представления была 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 в Android...
<View android:layout_width="fill_parent" android:layout_height="1dp" android:layout_marginTop="5dp" android:rotation="90" android:background="@android:color/darker_gray"/>
зависит от того, где вы хотите иметь вертикальную линию, но если вы хотите вертикальную границу, например, вы можете иметь Родительский вид с фоном, настраиваемым для рисования. И вы можете затем определить drawable следующим образом:
<?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:gravity="center"> <shape android:shape="rectangle"> <size android:width="1dp" /> <solid android:color="#0000FF" /> </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: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>
<View android:layout_width="2dp" android:layout_height="40dp" android:background="#ffffff" android:padding="10dp" />`
очень простой и я думаю, что лучший подход.
<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"/>подчеркнуть.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>
Comments