Pergunta

Estou tentando descobrir como definir uma linha vertical (1dp de espessura) para ser usada como um desenho.

Para fazer uma horizontal, é bem direto:

<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>

A questão é: como tornar essa linha vertical?

Sim, existem soluções alternativas, como desenhar uma forma de retângulo com 1 px de espessura, mas isso complica o XML desenhado, se consistir em múltiplos <item> elementos.

Alguém teve alguma chance com isso?

ATUALIZAR

O caso ainda não é resolvido. No entanto, para qualquer pessoa em uma Cruzada de Documentação do Android - você pode achar isso útil:Manual Android XML ausente

ATUALIZAR

Não encontrei nenhuma outra maneira além da que eu marquei como correta. Isso faz o truque, porém, parece um pouco "pesado", portanto, se você souber a resposta, não se esqueça de compartilhar;)

Foi útil?

Solução

Em vez de uma forma, você pode tentar um View:

<View
    android:layout_width="1dp"
    android:layout_height="fill_parent"
    android:background="#FF0000FF" />

Eu só usei isso para linhas horizontais, mas acho que também funcionaria para linhas verticais.

Usar:

<View
    android:layout_width="fill_parent"
    android:layout_height="1dp"
    android:background="#FF0000FF" />

Para uma linha horizontal.

Outras dicas

Você pode aninhar sua forma dentro de uma etiqueta rotativa.

<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>

No entanto, o único problema são os parâmetros de layout definidos no seu Layout XML serão as dimensões usadas para desenhar a forma original. Ou seja, se você deseja que sua linha tenha 30DP de altura, você precisa definir um layout_width de 30dp no seu layout xml. Mas a largura final também será de 30dp nesse caso, o que provavelmente é indesejável para a maioria das situações. Isso significa essencialmente que a largura e a altura devem ser o mesmo valor, o valor do comprimento desejado para a linha. Eu não conseguia descobrir como consertar isso.

Essa parece ser a solução "Android Way", mas, a menos que haja alguma solução ou solução alternativa para o problema das dimensões que mencionei, isso provavelmente não funcionará para a maioria das pessoas. O que realmente precisamos é um atributo de orientação emu003Cshape/> ouu003Cstroke/> .

Você também pode tentar fazer referência a outro desenhado nos atributos da etiqueta rotativa, como:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="90"
    android:toDegrees="90"
    android:drawable="@drawable/horizontal_line" />

No entanto, eu não testei isso e espero que ele tenha os mesmos problemas.

-Editar-

Oh, eu realmente descobri uma correção. Você pode usar uma margem negativa no seu Layout XML para se livrar do espaço extra indesejado. Tal como:

<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>

Funciona para mim . Coloque -o como pano de vista com Fill_parent ou de tamanho fixo em altura dp

Você pode usar o atributo girado

 <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>

Eu criei uma solução diferente. A idéia é preencher o desenhado primeiro com a cor que você gosta da linha e, em seguida, preencher toda a área novamente com a cor de fundo enquanto usava preenchimento esquerdo ou direito. Obviamente, isso funciona apenas para uma linha vertical na extrema esquerda ou à direita do seu traço.

<?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>

Eu acho que esta é a solução mais simples:

<?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>

Eu precisava adicionar minhas visualizações dinamicamente/programaticamente, portanto, adicionar uma visão extra teria sido complicado. Minha altura de visão era wrap_content, então não pude usar a solução de retângulo. Eu encontrei um post blog aqui Sobre a extensão do TextView, substituindo o OnDraw () e a pintura na linha, então implementei isso e funciona bem. Veja meu código abaixo:

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);
    }
}

Eu precisava de uma linha vertical à esquerda, mas os parâmetros da linha de draw são drawLine(startX, startY, stopX, stopY, paint) Assim, você pode desenhar qualquer linha reta em qualquer direção do outro lado da vista. Então na minha atividade eu tenhoNoteTextView note = new NoteTextView(this);Espero que isto ajude.

É muito simples ... adicionar uma linha vertical no 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"/>

Depende, onde você deseja ter a linha vertical, mas se você deseja uma borda vertical, por exemplo, poderá ter a visualização dos pais ter um plano de fundo um traçado personalizado. E você pode definir o desenhado assim:

<?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>

Este exemplo criará uma linha preta fina de 1dp no lado direito da vista, que terá isso desenhado como plano de fundo.

Você pode usar uma forma, mas em vez de uma linha o retange.

android:shape="rectangle">
<stroke
    android:width="5dp"
    android:color="#ff000000"
    android:dashGap="10px"
    android:dashWidth="30px" />

E em seu layout use isso ...

<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"/>

Você pode precisar brincar com a largura, dependendo do tamanho dos traços, para colocá -lo em uma única linha.

Espero que isso ajude aplausos

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>

Para fazer uma linha vertical, basta usar um retângulo com largura de 1dp:

<shape>
    <size
        android:width="1dp"
        android:height="16dp" />
    <solid
        android:color="#c8cdd2" />
</shape>

Não use stroke, usar solid (que é a cor "preenchimento") para especificar a cor da linha.

Parece que ninguém mencionou esta opção:

<?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" />`
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top