Linea verticale utilizzando drawable XML
-
27-09-2019 - |
Domanda
Sto cercando di capire come definire una linea verticale (1DP di spessore) da utilizzare come un disegnabile.
Per effettuare una orizzontale, è abbastanza semplice:
<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 domanda è: come rendere questa linea verticale?
Sì, ci sono soluzioni alternative, come disegnando un 1px forma rettangolare di spessore, ma che complica il XML drawable, se costituito da più elementi <item>
.
Chiunque ha avuto alcuna possibilità con questo?
Aggiorna
caso è ancora irrisolto. Tuttavia, Per chiunque in una crociata di documentazione Android - si potrebbe trovare questo utile: mancante XML Android manuale
Aggiorna
ho trovato nessun altro modo diverso da quello che ho segnato come corretta. Si fa il trucco se si sente un po ' "pesante", quindi se vi capita di conoscere la risposta non dimenticate di azione;)
Soluzione
Al posto di una forma, si potrebbe provare un View
:
<View
android:layout_width="1dp"
android:layout_height="fill_parent"
android:background="#FF0000FF" />
Ho solo usato questo per linee orizzontali, ma mi avrebbe pensato che avrebbe funzionato per linee verticali pure.
Usa:
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#FF0000FF" />
per una linea orizzontale.
Altri suggerimenti
È possibile nidificare la forma all'interno di un tag di rotazione.
<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>
Tuttavia, l'unico problema è il params di layout definiti nel layout XML saranno le dimensioni utilizzate per disegnare la forma originale. Significato se si desidera che la linea sia 30dp alto, è necessario definire un layout_width di 30dp nel layout xml. Ma la larghezza finale sarà anche 30dp in questo caso, è probabile che indesiderabile per molte situazioni. Ciò significa in sostanza larghezza e altezza devono essere lo stesso valore, il valore della lunghezza desiderata per la linea. Non riuscivo a capire come risolvere questo problema.
Questa sembra essere la soluzione "via Android", ma a meno che ci sia un po 'di correzione o una soluzione per le dimensioni emettere Dico allora questo probabilmente non funzionerà per la maggior parte delle persone. Ciò di cui abbiamo veramente bisogno è un attributo di orientamento in
Si può anche provare un altro riferimento drawable negli attributi del tag di rotazione, come ad esempio:
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:toDegrees="90"
android:drawable="@drawable/horizontal_line" />
Comunque non ho testato questo e si aspettano di avere gli stessi problemi.
- EDIT -
Oh, in realtà ho capito una correzione. È possibile utilizzare un margine negativo nel layout xml per sbarazzarsi dello spazio extra indesiderato. Come ad esempio:
<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>
Il lavoro è per me. Mettetela come sfondo di vista con fill_parent o fisso di dimensioni in altezza dp
È possibile utilizzare l'attributo di rotazione
<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>
mi si avvicinò con una soluzione diversa. L'idea è quella di riempire il drawable prima con il colore che ti piace di linea da e poi riempire nuovamente l'intera area con il colore di sfondo durante l'utilizzo di padding a sinistra oa destra. Ovviamente questo funziona solo per una linea verticale all'estrema sinistra o destra della vostra drawable.
<?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>
Credo che questa è la soluzione più semplice:
<?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>
avevo bisogno di aggiungere le mie opinioni in modo dinamico / a livello di codice, in modo da aggiungere una vista in più sarebbe stato ingombrante. La mia altezza vista era wrap_content, quindi non ho potuto usare la soluzione rettangolo. Ho trovato un blog-post qui su estendendo TextView, sovrascrivendo OnDraw () e la pittura in linea, in modo che ho implementato e funziona bene. Vedere il mio codice qui sotto:
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);
}
}
Ho bisogno di una linea verticale sulla sinistra, ma i parametri sono DrawLine drawLine(startX, startY, stopX, stopY, paint)
in modo da poter disegnare qualsiasi linea retta in qualsiasi direzione attraverso la vista.
Poi nella mia attività ho
NoteTextView note = new NoteTextView(this);
Spero che sia di aiuto.
è molto semplice ... per aggiungere una linea verticale in 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"/>
Dipende, in cui si desidera avere la linea verticale, ma se si desidera un bordo verticale per esempio, si può avere la vista padre hanno un background di un disegnabile personalizzato. E si può quindi definire drawable in questo modo:
<?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>
Questo esempio creerà una sottile linea nera 1DP sul lato destro della vista, che avrà questo drawable come sfondo.
È possibile utilizzare una forma, ma invece di una linea di make esso rettangolo.
android:shape="rectangle">
<stroke
android:width="5dp"
android:color="#ff000000"
android:dashGap="10px"
android:dashWidth="30px" />
In e l'utilizzo di layout questo ...
<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"/>
Si potrebbe avere per giocare con la larghezza, a seconda delle dimensioni dei trattini, per ottenere in una sola riga.
Spero che questo aiuti Acclamazioni
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>
Per fare una linea verticale, basta usare un rettangolo con larghezza 1DP:
<shape>
<size
android:width="1dp"
android:height="16dp" />
<solid
android:color="#c8cdd2" />
</shape>
Non utilizzare stroke
, uso solid
(che è il colore "di riempimento") per specificare il colore della linea.
Sembra che nessuno ha menzionato questa opzione:
<?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" />`