Ich musste eine Änderung vornehmen, damit die vertikale Linie angezeigt wird. Ich konnte den Code hier nicht im richtigen Stil einfügen, also habe ich eine neue Antwort hinzugefügt. stackoverflow.com/a/34856660/5309676
– Sfseyhan
18. Januar 2016 um 14:08 Uhr
Diese Art der Rotation ist besser: stackoverflow.com/a/34856660/1935135
– Andre Luis Reis
16. März 2018 um 17:27 Uhr
Bei vertikaler Ansicht muss man nachgeben match_parent in der Breite.
– Pratik Butani
24. Januar 2019 um 9:00 Uhr
Ich hatte das gleiche Problem und die Linie war nicht sichtbar. Ich habe gerade den folgenden Code in meine Bildansicht eingefügt und es hat funktioniert android:adjustViewBounds=”true” android:scaleType=”fitXY”
– Vaios
30. Mai 2019 um 16:00 Uhr
Der Ansatz mit benutzerdefinierten Komponenten von user846316 und Ulix funktioniert für die meisten Android-Systeme, da er dem offiziellen Ansatz folgt. Ich schlage vor, die richtige Antwort zu überdenken.
– Constantin Zagorsky
2. August 2019 um 15:57 Uhr
Sfseyhan
Wenn die Ansicht eine Breite von 1 dp hat, reicht es nicht aus, nur Ihre horizontale Linie zu drehen. Die Länge der vertikalen Linie beträgt 1 dp, da sie zuerst horizontal gezeichnet und dann gedreht wird. Hier ist ein Trick, um dieses Problem zu lösen:
Wenn Sie eine vertikale Trennlinie mit gestrichelter Linie wünschen, können Sie diese XML-Darstellung als Hintergrund der Ansicht festlegen, die Sie als Trennlinie verwenden.
– Sfseyhan
15. März 2016 um 17:35 Uhr
@Sfseyhan kannst du erklären, warum du links und rechts auf eingestellt hast -300dp ?
– Sufian
2. November 2016 um 7:24 Uhr
@Sufian Da die Linie zuerst horizontal gezeichnet und dann gedreht wird, brauchen wir horizontal genug Platz, um sie zu zeichnen. Wenn Sie -300 dp auf beiden Seiten verwenden, können Sie 600 dp horizontal zeichnen und dann wird es gedreht. In meinem Fall sind 600 dp mehr als genug, aber Sie können es bei Bedarf gerne erhöhen.
– Sfseyhan
2. November 2016 um 10:03 Uhr
@Sfseyhan ein ziemlicher Hack! Danke fürs Erklären.
– Sufian
2. November 2016 um 11:02 Uhr
Vielen Dank. Ihre Lösung hat mir das Leben gerettet.
– Andre Luis Reis
16. März 2018 um 16:56 Uhr
ulix
Ich glaube, ich habe eine “sauberere” Lösung für dieses Problem gefunden, indem ich eine benutzerdefinierte Ansicht erstellt habe, die einen bestimmten Code zum Zeichnen der gestrichelten Linien (sowohl in vertikaler als auch in horizontaler Ausrichtung) und eine Reihe von Attributen enthält, um die Verwendung sehr einfach zu machen XML-Layouts. Der Hauptvorteil dieses Ansatzes gegenüber der Methode der “gedrehten Linie” besteht darin, dass Sie die Größe der gestrichelten Linienansicht so einstellen können, wie Sie es normalerweise tun würden, ohne sich Gedanken darüber machen zu müssen, wie sich die Ansicht nach der Drehung verhalten wird (sobald die Drehung gilt für die gesamte gestrichelte Linienansicht und nicht nur für die gezeichnete Linie).
Hier also die Schritt-für-Schritt-Lösung:
Erstellen Sie die Datei „/res/values/attrs.xml“ mit folgendem Inhalt:
Dadurch werden die Attribute zum Steuern der benutzerdefinierten Ansicht erstellt. Hinweis: Wenn die obige Datei bereits in Ihrem Projekt vorhanden ist, kopieren Sie einfach den Block „declare-styling“ und fügen Sie ihn in den vorhandenen Block „resources“ ein.
Erstellen Sie die Klasse DividerView und fügen Sie den folgenden Inhalt ein:
public class DividerView extends View {
static public int ORIENTATION_HORIZONTAL = 0;
static public int ORIENTATION_VERTICAL = 1;
private Paint mPaint;
private int orientation;
public DividerView(Context context, AttributeSet attrs) {
super(context, attrs);
int dashGap, dashLength, dashThickness;
int color;
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.DividerView, 0, 0);
try {
dashGap = a.getDimensionPixelSize(R.styleable.DividerView_dashGap, 5);
dashLength = a.getDimensionPixelSize(R.styleable.DividerView_dashLength, 5);
dashThickness = a.getDimensionPixelSize(R.styleable.DividerView_dashThickness, 3);
color = a.getColor(R.styleable.DividerView_color, 0xff000000);
orientation = a.getInt(R.styleable.DividerView_orientation, ORIENTATION_HORIZONTAL);
} finally {
a.recycle();
}
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setColor(color);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(dashThickness);
mPaint.setPathEffect(new DashPathEffect(new float[] { dashLength, dashGap, }, 0));
}
public DividerView(Context context) {
this(context, null);
}
@Override
protected void onDraw(Canvas canvas) {
if (orientation == ORIENTATION_HORIZONTAL) {
float center = getHeight() * .5f;
canvas.drawLine(0, center, getWidth(), center, mPaint);
} else {
float center = getWidth() * .5f;
canvas.drawLine(center, 0, center, getHeight(), mPaint);
}
}
}
Um die automatische Vervollständigung von Attributen für Ihre Layoutdateien zu verwenden, fügen Sie die folgende Namensraumdefinition zum obersten Container hinzu:
Ersetzen com.example nach dem Namen Ihres Pakets. Sie können sich auch ändern custom durch ein beliebiges Präfix, das Ihren Anforderungen besser entspricht. Hinweis: Möglicherweise müssen Sie Eclipse neu starten, damit die automatische Vervollständigung nach Änderungen an der Datei attrs.xml funktioniert.
Erstellen Sie schließlich Ihre gestrichelten Linien, indem Sie das folgende Element wie jede andere Ansicht in Ihr Layout einfügen:
Ich möchte nur hinzufügen, dass in der onDraw-Methode der Aufruf drawLine bei mir nicht funktioniert hat! Stattdessen habe ich canvas.drawPaint(mPaint) verwendet; Ich scheine nicht der einzige zu sein, der dieses Problem hat: code.google.com/p/android/issues/detail?id=29944
– JacksOnF1re
21. Januar 2015 um 16:09 Uhr
Sie müssen Schritt 3 jetzt nicht ausführen, Sie können einfach “app:…”-Tags in XML verwenden
– amitavk
12. September 2017 um 14:21 Uhr
die beste antwort
– wie es ist
15. Mai 2019 um 7:48 Uhr
Da ich neu bei Android bin, bin ich nach dem Lesen dieser Antwort auf den richtigen Weg gekommen, indem ich gelesen habe – developer.android.com/guide/topics/ui/custom-components . In letzter Zeit habe ich mich daran gewöhnt, Stackoverflow First Documentation 2nd zu lesen … Diese Antworten sind ein gutes kurzes Tutorial zum Schreiben benutzerdefinierter Komponenten. Mein Rat wäre, drawLine durch drawPath zu ersetzen, damit Sie Hardware-Rendering verwenden können. Danke
– Constantin Zagorsky
2. August 2019 um 15:49 Uhr
Danke.. Sie sparen meine Zeit
– Ncit Cosmos
7. Februar 2020 um 8:36 Uhr
Um dies zu erreichen, sollten Sie 2 verschiedene drawable erstellen,
Ihre Antwort könnte durch zusätzliche unterstützende Informationen verbessert werden. Bitte bearbeiten Sie, um weitere Details wie Zitate oder Dokumentation hinzuzufügen, damit andere bestätigen können, dass Ihre Antwort richtig ist. Weitere Informationen zum Verfassen guter Antworten finden Sie in der Hilfe.
– Gemeinschaft bot
24. September 2021 um 13:47 Uhr
10923200cookie-checkErstellen horizontaler und vertikaler gepunkteter Linien in Androidyes