Pregunta

Estoy tratando de encontrar la manera de definir una línea vertical (1DP de espesor) para ser utilizado como un estirable.

Para hacer una horizontal, que es bastante sencillo:

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

La pregunta es cómo hacer que esta línea vertical?

Sí, hay soluciones alternativas, tales como dibujo de un 1px forma de rectángulo grueso, pero que complica el XML estirable, si consiste en múltiples elementos <item>.

alguien tenía alguna oportunidad con esto?

Actualizar

caso sigue sin resolverse. Sin embargo, Para cualquier persona en una cruzada documentación Android - puede resultar útil: Missing Manual XML Android

Actualizar

he encontrado ninguna otra manera que no sea la que he marcado como correcto. Se hace el truco, aunque se siente un poco "pesadas", por lo que si por casualidad usted conoce la respuesta no se olvide de acción;)

¿Fue útil?

Solución

En lugar de una forma, usted podría intentar un View:

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

Sólo he utilizado esto para líneas horizontales, pero yo creo que funcionaría para las líneas verticales también.

Uso:

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

para una línea horizontal.

Otros consejos

Puede anidar su forma dentro de una etiqueta de rotación.

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

Sin embargo, el único problema es que los parametros de diseño definidos en su diseño XML serán las dimensiones utilizadas para dibujar la forma original. Es decir, si usted quiere que su línea ser 30DP alto, es necesario definir un layout_width de 30DP en su diseño XML. Sin embargo, la anchura final también será 30DP en ese caso, lo que probablemente no deseable para la mayoría de las situaciones. Esto significa esencialmente la anchura y la altura tienen que ser el mismo valor, el valor de la longitud deseada para la línea. No podía encontrar la manera de solucionar este problema.

Esta parece ser la solución "camino androide", pero a menos que haya alguna corrección o solución para las dimensiones de la edición que menciono a continuación, es probable que esto no funciona para la mayoría de la gente. Lo que realmente necesita es un atributo orientación en la o .

También puede intentar hacer referencia a otra estirable en atributos de la etiqueta de rotación, como por ejemplo:

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

Sin embargo no he probado esto y esperamos que tenga los mismos problemas.

- Editar -

Oh, de hecho me di cuenta de una solución. Puede utilizar un margen negativo en su diseño XML para deshacerse del espacio adicional no deseado. Tales 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>

El trabajo es para mí. Ponerla como fondo de vista con fill_parent o tamaño fijo de altura dp

Se puede utilizar el atributo de rotación

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

Se me ocurrió una solución diferente. La idea es llenar el dibujable primero con el color que te gusta de la línea que se va y luego llenar toda la zona de nuevo con el color de fondo durante el uso de carnes de izquierda o derecha. Obviamente, esto sólo funciona para una línea vertical en el extremo izquierdo o derecho de su estirable.

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

Creo que esta es la solución más simple:

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

Yo tenía que añadir mis puntos de vista dinámicamente / programación, por lo que añadir una vista adicional habría sido engorroso. Mi altura vista era WRAP_CONTENT, por lo que no podía usar la solución rectángulo. He encontrado un blog post aquí acerca extendiéndose TextView, anulando onDraw () y las pinturas de la línea, por lo que he implementado y funciona bien. Ver mi código a continuación:

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

Yo necesitaba una línea vertical a la izquierda, pero los parámetros son drawLine drawLine(startX, startY, stopX, stopY, paint) para que pueda dibujar cualquier línea recta en cualquier dirección a través de la vista. Luego, en mi actividad tengo NoteTextView note = new NoteTextView(this); Espero que esto ayude.

Es muy simple ... añadir una línea vertical en 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, en donde usted quiere tener la línea vertical, pero si desea dejar un borde vertical, por ejemplo, puede tener la vista padre tiene un fondo de un dibujable personalizado. Y a continuación, puede definir la estirable como esto:

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

En este ejemplo se creará una línea delgada negro 1DP en el lado derecho de la vista, que tendrá este estirable como fondo.

Se puede utilizar una forma, pero en lugar de una línea de maquillaje que rectángulo.

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

y en el uso de este diseño ...

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

Puede que tenga que jugar con el ancho, dependiendo del tamaño de los guiones, para entrar en una sola línea.

Espero que esto ayude Saludos

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 hacer una línea vertical, sólo tiene que utilizar un rectángulo con un ancho de 1DP:

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

No utilice stroke, el uso solid (que es el color "relleno") para especificar el color de la línea.

Parece que nadie mencionó esta opción:

<?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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top