Estoy tratando de averiguar cómo definir una línea vertical (1dp de espesor) para ser utilizado como un dibujable.

Para hacer una horizontal, 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 de esta línea vertical?

Sí, hay soluciones alternativas, tales como el dibujo de un rectángulo de forma 1px gruesa, pero que complica el dibujable XML, si se compone de varios <item> elementos.

Alguien tenía alguna posibilidad con esto?

ACTUALIZACIÓN

Caso sigue sin resolverse. Sin embargo,
Para cualquier usuario de Android documentación cruzada – puede resultar útil:
Faltan Android XML Manual

ACTUALIZACIÓN

No encontré otra forma que no sea la que tengo marcada como correcta. Se hace el truco, aunque se siente un poco «pesado», por lo que si por casualidad usted conoce la respuesta no te olvides de compartir 😉

InformationsquelleAutor Kaspa | 2010-04-17

15 Comentarios

  1. 370

    Lugar de una forma, usted podría tratar de un View:

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

    Sólo he utilizado este de líneas horizontales, pero yo creo que el trabajo para las líneas verticales así.

    Uso:

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

    por una línea horizontal.

    • gracias Marcos :)! Soy consciente de que puedo usar para lograr esto. La cosa es que estoy montando un poco más complejo de la vista que desea utilizar como imagen de fondo de una celda de la tabla. Hay diferentes tipos de formas/gradientes/líneas de allí. Utilizando una vista SERÍA una solución, sin embargo, me tendría que poner en un dibujo diferentes «capas» y que es potencialmente tiro en el pie cuando me va a venir a través de cambio de tamaño, etc. Me pregunto por qué no hay ninguna documentación sobre la «forma» xmls, tal vez alguien de google podría iluminarnos? 🙂
    • El uso de marginRight/Start y la Izquierda/a la Final a veces también es interesante para obtener espacio en los lados.
  2. 100

    Se pueden anidar a su forma en el interior de un rotar etiqueta.

    <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 el diseño de parámetros definidos en el xml del diseño serán las dimensiones que se usan para dibujar la forma original. Esto significa que si usted quiere que su línea de 30dp de altura, es necesario definir un layout_width de 30dp en el layout xml. Pero el ancho final también será 30dp en ese caso, lo que es probable indeseable para la mayoría de las situaciones. Básicamente, esto significa que la anchura y la altura tiene que ser el mismo valor, el valor de la longitud deseada para la línea. Yo no podía entender cómo solucionar este problema.

    Este parece ser el «android» de manera de solución, pero a menos que haya alguna solución para las dimensiones del problema menciono a continuación, esto probablemente no va a funcionar para la mayoría de la gente. Lo que realmente necesitamos es una orientación atributo en <forma/> o <accidente cerebrovascular/>.

    También puede tratar de hacer referencia a otro dibujable en el girar de los atributos de las etiquetas, tales como:

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

    Sin embargo yo no he probado esto y esperar a tener los mismos problemas.

    — EDIT —

    Oh, de hecho, me di cuenta de una revisión. Usted puede utilizar un margen negativo en el layout xml para deshacerse de los indeseables de espacio extra.
    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" />
    • mientras que el margen negativo de trabajo para el 99% de los dispositivos….sólo sé, que hay dispositivos que Cerca de la Fuerza de hacer esto. Algunos dispositivos tienen problemas para inflar un margen negativo
    • Puedo usar su primer código, pero necesito la línea en la parte superior de la vista. Es en el centro de mi vista. ¿Cómo puedo establecer una gravedad para ello(dentro de la forma de archivo xml)?
  3. 16
    <?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>

    Me funciona a mi . Ponerlo como fondo de la vista con fill_parent o de tamaño fijo en dp altura

  4. 15

    Puede utilizar la rotación atributo

     <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>
    • Por favor explicar un poco más por qué esta es la mejor respuesta…
    • Esta es definitivamente una de las mejores (o la mejor) respuesta, porque, mientras que @commonsware la respuesta suficiente para el normal líneas verticales. Si nos wan’t para crear líneas de trazos (digamos, por ejemplo), esta es la única respuesta que funcione correctamente.
  5. 10

    Se me ocurrió una solución diferente. La idea es llenar el dibujable primero con el color que te gusta de la línea y, a continuación, llenar toda la zona de nuevo con el color de fondo, mientras que con izquierda o a la derecha de relleno. Obviamente, esto sólo funciona para una línea vertical en el extremo izquierdo o derecho de la imagen.

    <?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>
    • Necesitaba fondo con las fronteras de la izquierda, a la derecha, abajo y esto funcionó para mí, gracias!
    • Impresionante, con esta me las arreglé para crear limpio divisores en mi LinearLayout (showDividers="middle"). Para obtener una 2dp divisor, necesitaba especificar android:left="3dp" aquí.
    • Sugerencia: para hacer este dibujable más útil en general, el uso de @android:color/transparent en lugar de escribir @color/background_color.
    • En realidad para mi separador vertical necesidades, esta solución es aún más sencilla. 🙂
    • Seguro, pero eso sólo funciona con una altura fija la vista, no con wrap_content.
    • Aquí está la perfección de esta técnica : stackoverflow.com/questions/10457135/…

  6. 6

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

    <?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>
    • Maravilloso. Agregar android:height a size si usted quiere controlar también esa dimensión.
  7. 4

    Tuve que agregar mi punto de vista dinámicamente/programación, por lo que añadir un extra de vista habría sido incómodo. Mi punto de vista la altura de WRAP_CONTENT, así que no podía usar el rectángulo de la solución. He encontrado un blog-post aquí acerca de la extensión de TextView, anulando onDraw() y la pintura en la línea, por lo que he implementado y que funciona bien. Ver mi código de abajo:

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

    Necesitaba una línea vertical a la izquierda, pero el drawline parámetros son drawLine(startX, startY, stopX, stopY, paint) así que usted puede 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.

  8. 4

    es muy simple…
    para 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"/>
    • Esto funciona muy bien cuando no puede usar fill_parent de altura debido a que el padre de la altura se establece en wrap_content.
  9. 2

    Depende, en donde usted quiere tener la línea vertical, pero si quieres un borde vertical por ejemplo, usted puede tener la vista principal tiene un fondo personalizado dibujable. Y a continuación, puede definir la imagen como esta:

    <?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 ejemplo se crea un 1dp delgada línea negra en el lado derecho de la vista, que tendrá esta imagen como fondo.

  10. 1

    Puede utilizar de una forma, pero en lugar de una línea hacen que sea rectángulo.

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

    y En su uso de la distribución de este…

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

    Usted podría tener que jugar con el ancho, dependiendo del tamaño de los guiones, para hacerlo en una sola línea.

    Espero que esto ayude
    Saludos

  11. 1
    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. 1
    <?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. 0

    Para hacer una línea vertical, sólo tiene que utilizar un rectángulo con ancho de 1dp:

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

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

  14. 0

    Parece que nadie menciona 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>
  15. -1
     <View
    android:layout_width="2dp"
    android:layout_height="40dp"
    android:background="#ffffff"
    android:padding="10dp" />`

Dejar respuesta

Please enter your comment!
Please enter your name here