Gibt es eine einfache Möglichkeit, einen Rand am oberen und unteren Rand einer Android-Ansicht hinzuzufügen?

407

Ich habe eine Textansicht und möchte einen schwarzen Rand entlang der oberen und unteren Ränder hinzufügen. Ich habe versucht, android:drawableTopund android:drawableBottomzur Textansicht hinzuzufügen, aber dadurch wurde nur die gesamte Ansicht schwarz.

<TextView
    android:background="@android:color/green"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:drawableTop="@android:color/black"
    android:drawableBottom="@android:color/black"
    android:text="la la la" />

Gibt es eine Möglichkeit, einer Ansicht (insbesondere einer Textansicht) in Android auf einfache Weise einen oberen und unteren Rand hinzuzufügen?

emmby
quelle
2
Es ist überraschend, dass niemand dividerVertical erwähnt hat ! Dies ist die Sache, die von Android entwickelt wurde, um vertikale Teiler zu erzielen. Es könnte nicht einfacher sein und Sie erledigen alles im WYSIWYG-Bedienfeld "Design" in Android Studio.
Fattie
note dividerVertical wurde in API 11 implementiert.
JPM
1
Vielleicht können Sie zeigen, wie man dividerVertical benutzt?
AndroidGy

Antworten:

430

In Android 2.2 können Sie Folgendes tun.

Erstellen Sie eine XML-Zeichnungsdatei wie /res/drawable/textlines.xml und weisen Sie diese als Hintergrundeigenschaft von TextView zu.

<TextView
android:text="My text with lines above and below"
android:background="@drawable/textlines"
/>

/res/drawable/textlines.xml

<?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="#FF000000" />
            <solid android:color="#FFDDDDDD" />

        </shape>
   </item>

   <item android:top="1dp" android:bottom="1dp"> 
      <shape 
        android:shape="rectangle">
            <stroke android:width="1dp" android:color="#FFDDDDDD" />
            <solid android:color="#00000000" />
        </shape>
   </item>

</layer-list>

Der Nachteil dabei ist, dass Sie eine undurchsichtige Hintergrundfarbe angeben müssen, da Transparentfolien nicht funktionieren. (Zumindest dachte ich, dass sie es taten, aber ich habe mich geirrt). Im obigen Beispiel sehen Sie, dass die Volltonfarbe der ersten Form #FFdddddd in die Strichfarbe der zweiten Form kopiert wird.

Emile
quelle
11
Sehen Sie sich auch diese Lösung an, die auch für TextViews funktioniert, wenn Sie einen Rahmen ringsum möchten
emmby
26
Versuchen Sie es mit android:color="@null", um ein undurchsichtiges Hintergrundproblem zu vermeiden.
Matt Briançon
@emmby: Wenn Sie diesen Code auf einem Tablet testen, dauert es einige Zeit, bis er auf dem Bildschirm gerendert ist. Nach 1 Sekunde werden beim Scrollen Ränder angezeigt
Chetan
5
Der Trick android: color = "@ null" hat mir nicht geholfen, Transparenz zu bewahren und nur einen Rand auf einer Seite der Ansicht anzuzeigen. Antwort von user1051892 unten hat den Job gemacht!
Rick Pastoor
8
Diese Lösung bildete auch links und rechts einen Rand - wenn auch einen dünneren.
AlikElzin-Kilaka
279

Ich habe einen Trick verwendet, damit der Rand außerhalb des Containers angezeigt wird. Mit diesem Trick wird nur eine Linie gezeichnet, sodass der Hintergrund der zugrunde liegenden Ansicht angezeigt wird.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:bottom="1dp"
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape android:shape="rectangle" >
            <stroke
                android:width="1dp"
                android:color="#FF000000" />

            <solid android:color="#00FFFFFF" />

            <padding android:left="10dp"
                android:right="10dp"
                android:top="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

</layer-list>
user1051892
quelle
3
Das hat bei mir großartig funktioniert, mit ein paar Änderungen, um die Linie etwas dünner zu machen.
Jeff
1
Sehr schöner Trick, obwohl es schöner sein könnte, wenn wir den Computer nicht austricksen müssen, um Dinge zu erledigen.
Yukio Fukuzawa
schön gemacht! Was Sie sehen sollten, ist links, oben, rechts, unten sollte - (Strichbreite) dp
asakura89
Es wurde kein Rand
angezeigt
1
Schön gemacht, mit transparentem Hintergrund gearbeitet. Getestet in 2.2 und 4.4.2. Sollte alles dazwischen
abdecken
97

Option 1: Form zeichnbar

Dies ist die einfachste Option, wenn Sie einen Rahmen um ein Layout oder eine Ansicht möchten, in dem Sie den Hintergrund festlegen können. Erstellen Sie eine XML-Datei in dem drawableOrdner, der ungefähr so ​​aussieht:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#8fff93" />

    <stroke
        android:width="1px"
        android:color="#000" />

</shape>

Sie können das entfernen, solidwenn Sie keine Füllung wünschen. Der Satzbackground="@drawable/your_shape_drawable" in Ihrem Layout / Ihrer Ansicht.

Option 2: Hintergrundansicht

Hier ist ein kleiner Trick, den ich in einem verwendet habe RelativeLayout . Grundsätzlich haben Sie ein schwarzes Quadrat unter der Ansicht, der Sie einen Rand geben möchten, und geben dieser Ansicht dann etwas Polsterung (nicht Rand!), Damit das schwarze Quadrat an den Rändern durchscheint.

Dies funktioniert natürlich nur dann ordnungsgemäß, wenn die Ansicht keine transparenten Bereiche aufweist. In diesem Fall würde ich empfehlen, einen benutzerdefinierten BorderViewCode zu schreiben, der nur den Rand zeichnet - es sollten nur ein paar Dutzend Codezeilen sein.

<View
    android:id="@+id/border"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/image"
    android:layout_alignLeft="@+id/image"
    android:layout_alignRight="@+id/image"
    android:layout_alignTop="@+id/main_image"
    android:background="#000" />

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_...
    android:padding="1px"
    android:src="@drawable/..." />

Wenn Sie sich fragen, es tut Arbeit mit adjustViewBounds=true. Es funktioniert jedoch nicht, wenn Sie einen Hintergrund in einem Ganzen haben möchten RelativeLayout, da es einen Fehler gibt , der Sie daran hindert , einen RelativeLayoutmit einem zu füllen View. In diesem Fall würde ich das empfehlenShape Drawable .

Option 3: 9-Patch

Eine letzte Option ist die Verwendung eines 9-Patch-Zeichens wie dieses:

Sie können es in jeder Ansicht verwenden, in der Sie festlegen können android:background="@drawable/...". Und ja, es muss 6x6 sein - ich habe 5x5 ausprobiert und es hat nicht funktioniert.

Der Nachteil dieser Methode ist, dass Sie die Farben nicht einfach ändern können. Wenn Sie jedoch ausgefallene Ränder wünschen (z. B. nur einen Rand oben und unten, wie in dieser Frage), können Sie diese möglicherweise nicht mit dem ShapeZeichenelement ausführen , was nicht sehr mächtig ist.

Option 4: Zusätzliche Ansichten

Ich habe vergessen, diese wirklich einfache Option zu erwähnen, wenn Sie nur Ränder über und unter Ihrer Ansicht haben möchten. Sie können Ihre Ansicht vertikal platzieren LinearLayout(falls noch nicht geschehen) und dann Viewwie folgt leere s darüber und darunter hinzufügen :

<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>
Timmmm
quelle
4
9 Patch und die Form zeichnbar sind in Ordnung, aber ich würde empfehlen, keine Ansichten oder Bildansichten hinzuzufügen, um ein solches Problem zu lösen. Der Grund dafür ist, dass Sie so viele <Elemente> aus Ihren Layouts entfernen sollten, um das Neuzeichnen und Animieren von Layouts zu verbessern. Ich würde diese sofort entfernen und einige ähnlich wie Option 1 oder 2 implementieren.
Emile
2
@Emile Das stimmt, aber wenn Sie eine benutzerdefinierte ListView verwenden, die keine Teiler unterstützt, ist eine einfache Ansicht in Ordnung. Die Auswirkungen auf die Leistung sind nahezu gleich Null, insbesondere wenn Sie sicher sind, dass Ihre Layouttiefe niedrig bleibt. Außerdem werden Fehler mit ListView-Teilern zwischen Geräten umgangen (ich habe einige Geräte gesehen, die diese Eigenschaft ignorieren).
Tom
Sie können auch das effiziente Viewholder-Muster mit Listenansichten verwenden, um sicherzustellen, dass Sie die Anzahl der Aufrufe von findViewByID reduzieren, was häufig die Ursache für eine schlechte Listenleistung ist.
Emile
In iOS gibt es nur einen Weg, dies zu tun. Auf Android sollten Sie mindestens vier testen, in meinem Fall war Option 4 der richtige Weg. Manchmal hängen Drawables als Hintergrund zum Rendern, seien Sie sich dessen bewusst.
Ratata Tata
1
Warum hatte Android nicht die einfachste Lösung für solche Dinge? wie in einer anderen Sprache, wie HTML, CSS oder etwas JavaFX, WPF ......
Asif Mushtaq
95

Hinzufügen eines 1dp nur unten weißen Rand und einen transparenten Hintergrund zu erhalten, können Sie Folgendes verwenden, was einfacher ist als die meisten Antworten hier.

Für die TextViewoder eine andere Ansicht hinzufügen:

android:background="@drawable/borderbottom"

Fügen Sie im drawableVerzeichnis das folgende XML hinzu, das aufgerufen wirdborderbottom.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="-2dp" android:left="-2dp" android:right="-2dp">
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#ffffffff" />
            <solid android:color="#00000000" />
        </shape>
    </item>
</layer-list>

Wenn Sie oben einen Rahmen wünschen, ändern Sie den android:top="-2dp"inandroid:bottom="-2dp"

Die Farbe muss nicht weiß sein und der Hintergrund muss auch nicht transparent sein.

Das solidElement ist möglicherweise nicht erforderlich. Dies hängt von Ihrem Design ab (danke V. Kalyuzhnyu).

Grundsätzlich erstellt diese XML-Datei einen Rahmen mit der Rechteckform, schiebt dann jedoch die obere, rechte und linke Seite über den Renderbereich für die Form hinaus. Dadurch bleibt nur der untere Rand sichtbar.

Tigger
quelle
8
Dies ist die beste Lösung, da sie nicht wie die anderen zu einer Überziehung führt
Greg Ennis
Gibt es einen Grund, warum negative Positionen doppelt so groß sind wie Striche mit ( -2dpvs 1dp)? Scheint zu funktionieren, wenn sie gleich groß sind ( -1und 1).
Denis Kniazhev
@DenisKniazhev: Bei der Verwendung war -2dpdas Ergebnis immer sauber. Ich denke, es gab einen Testfall, bei dem das Ergebnis nicht sauber war. Ich kann mich nicht erinnern, ob es ein Bildschirm mit niedriger oder hoher Dichte oder sogar eine ältere Version von Android war (2.x vielleicht).
Tigger
Interessant. Wissen Sie, ob dies ein allgemeiner Fall ist, z. B. wenn ich die 4dpStrichbreite -8dpfür die Positionierung verwenden soll?
Denis Kniazhev
1
@DenisKniazhev: (aus dem Gedächtnis) Es sah aus wie eine Gleitkommaberechnung, die nur ein wenig zu groß oder zu klein war. Dies bedeutet, dass ein Wert von -5dpalles ist, was mit einem Breitenwert von benötigt wird 4pd. Es musste einfach etwas größer sein, um die Ungenauigkeit des Float-Werts zu überwinden.
Tigger
36

Die aktuell akzeptierte Antwort funktioniert nicht. Durch Anti-Aliasing werden auf der linken und rechten Seite der Ansicht dünne vertikale Ränder erstellt.

Diese Version funktioniert perfekt. Außerdem können Sie die Rahmenbreiten unabhängig voneinander festlegen und bei Bedarf auch Rahmen auf der linken / rechten Seite hinzufügen. Der einzige Nachteil ist, dass es KEINE Transparenz unterstützt.

Erstellen Sie eine XML-Zeichnungsdatei /res/drawable/top_bottom_borders.xmlmit dem folgenden Code und weisen Sie sie als Hintergrundeigenschaft von TextView zu.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#DDDD00" /> <!-- border color -->
        </shape>
    </item>

    <item
        android:bottom="1dp" 
        android:top="1dp">   <!-- adjust borders width here -->
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF" />  <!-- background color -->
        </shape>
    </item>
</layer-list>

Getestet auf Android KitKat durch Marshmallow

gregschlom
quelle
Wie macht man innen transparent?
Hitesh Sahu
1
@HiteshSahu Ich denke, der Nachteil davon ist, dass Sie den Hintergrund des Layouts mit dem Hintergrund des Widgets hier
abgleichen müssten
35

Also wollte ich etwas anderes machen: NUR einen Rand am unteren Rand, um einen ListView-Teiler zu simulieren. Ich habe die Antwort von Piet Delport geändert und Folgendes erhalten:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
   <item>
      <shape 
        android:shape="rectangle">
            <solid android:color="@color/background_trans_light" />    

        </shape>
   </item>

    <!-- this mess is what we have to do to get a bottom border only. -->
   <item android:top="-2dp"
         android:left="-2dp"
         android:right="-2dp"
         android:bottom="1px"> 
      <shape 
        android:shape="rectangle">    
            <stroke android:width="1dp" android:color="@color/background_trans_mid" />
            <solid android:color="@null" />
        </shape>
   </item>

</layer-list>

Beachten Sie, dass Sie px anstelle von dp verwenden, um genau einen 1-Pixel-Teiler zu erhalten (bei einigen Telefon-DPIs verschwindet eine 1-dp-Zeile).

Phreakhead
quelle
2
sehr geehrter! Was ist der Wert von "@color/background_trans_light"?
Shajeel Afzal
Cheers @phreakhead, das funktioniert tatsächlich bei mir! Kein oberer, linker oder rechter Rand. Genau das, was ich brauchte, danke!
Shanehoban
2
Können Sie bitte erklären, warum es verschwindet, wenn Sie -2dp setzen und wenn Sie -1dp setzen, ist es immer noch sichtbar? Vielen Dank!
Francisco Romero
9

Genau wie @Nic Hubbard sagte, gibt es eine sehr einfache Möglichkeit, eine Grenzlinie hinzuzufügen.

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="#000000" >
</View>

Sie können die Höhe und Hintergrundfarbe nach Belieben ändern.

MattZ
quelle
8

Meine Antworten basieren auf der @ Emile-Version, aber ich verwende transparente Farben anstelle von Volltonfarben.
In diesem Beispiel wird ein unterer 2DP-Rand gezeichnet.

<?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="2dp"
                     android:color="#50C0E9" />
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
    <item  android:bottom="2dp" >
        <shape android:shape="rectangle" >
            <stroke  android:width="2dp"
                     android:color="@color/bgcolor" />
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
</layer-list>

@ color / bgcolor ist die Farbe des Hintergrunds, auf dem Sie Ihre Ansicht mit Rand zeichnen.

Wenn Sie die Position des Rahmens ändern möchten, ändern Sie den Versatz mit einem der folgenden Punkte:

android:bottom="2dp"
android:top="2dp"
android:right="2dp"
android:left="2dp"

oder kombinieren Sie sie, um 2 oder mehr Ränder zu haben:

android:bottom="2dp" android:top="2dp"
vovahost
quelle
7

Sie können die Ansicht auch in ein FrameLayout einschließen und dann die Hintergrundfarbe und den Abstand des Rahmens auf die gewünschten Werte einstellen. Die Textansicht hat jedoch standardmäßig einen "transparenten" Hintergrund, sodass Sie auch die Hintergrundfarbe der Textansicht ändern müssen.

okaram
quelle
Ziemlich einfach. Sie steuern die Größe und Richtung der Konturen über die Ränder der inneren Ansicht. Vielen Dank.
Scott Biggs
5

Warum nicht einfach eine 1dp-Ansicht mit einer Hintergrundfarbe erstellen? Dann kann es einfach platziert werden, wo Sie wollen.

Nic Hubbard
quelle
4

Nur um meine Lösung zur Liste hinzuzufügen ..

Ich wollte einen halbtransparenten unteren Rand, der über die ursprüngliche Form hinausragt (der halbtransparente Rand befand sich also außerhalb des übergeordneten Rechtecks).

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
  <item>
    <shape android:shape="rectangle" >      
      <solid android:color="#33000000" /> <!-- Border colour -->
    </shape>
  </item>
  <item  android:bottom="2dp" >
    <shape android:shape="rectangle" >     
      <solid android:color="#164586" />
    </shape>
  </item>
</layer-list>

Welches gibt mir;

Geben Sie hier die Bildbeschreibung ein

Cadab
quelle
4

Um dies zu ändern:

<TextView
    android:text="My text"
    android:background="@drawable/top_bottom_border"/>

Ich bevorzuge diesen Ansatz in "drawable / top_bottom_border.xml":

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient
                android:angle="270"
                android:startColor="#000"
                android:centerColor="@android:color/transparent"
                android:centerX="0.01" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:angle="90"
                android:startColor="#000"
                android:centerColor="@android:color/transparent"
                android:centerX="0.01" />
        </shape>
    </item>
</layer-list>

Dadurch werden nur die Ränder erstellt, kein Rechteck, das angezeigt wird, wenn Ihr Hintergrund eine Farbe hat.

Dinidiniz
quelle
3

Erstellen Sie zunächst eine XML-Datei mit dem unten gezeigten Inhalt, benennen Sie sie border.xml und legen Sie sie im Layoutordner im Verzeichnis res ab

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="1dp" android:color="#0000" />
    <padding android:left="0dp" android:top="1dp" android:right="0dp"
        android:bottom="1dp" />
</shape>

Danach im Code verwenden

TextView tv = (TextView)findElementById(R.id.yourTextView);
tv.setBackgroundResource(R.layout.border);

Dadurch wird oben und unten in der Textansicht eine schwarze Linie angezeigt.

Nikhil Dinesh
quelle
Ja, es wird funktionieren, ich habe es überprüft. Button button = (Button) findViewById (R.id.button); button.setBackgroundResource (R.layout.border);
Nikhil Dinesh
Ich habe in der obigen XML-Datei schwarze Farbe verwendet. Ihre Hintergrundfarbe ist möglicherweise schwarz. Versuchen Sie es mit einer anderen Farbe. Es wird definitiv funktionieren <? Xml version = "1.0" encoding = "UTF-8"?> <Shape xmlns: android = " schemas.android.com/apk/res/android "> <solid android: color = "# 474848 "/> <Strich android: width =" 1dp "android: color =" # ffff00 "/> <padding android: left =" 1dp "android: top =" 1dp "android: right =" 1dp "android: bottom =" 1dp "/> </ form>
Nikhil Dinesh
1
Hat bei mir nicht funktioniert. Die Grenzlinie wurde in der Mitte der Textansicht horizontal gezeichnet.
AlikElzin-Kilaka
3

Schreiben Sie den folgenden Code auf

<View
    android:layout_width="wrap_content"
    android:layout_height="2dip"
    android:layout_below="@+id/topics_text"
    android:layout_marginTop="7dp"
    android:layout_margin="10dp"
    android:background="#ffffff" />
Abhi
quelle
2

Hier ist ein Weg, um dies zu erreichen.

    <?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="@color/grey_coaching_text" />
            </shape>
        </item>

        <item
            android:bottom="1dp"
            android:top="1dp">
            <shape android:shape="rectangle">
                <solid android:color="@color/white" />
            </shape>
        </item>
    </layer-list>

Erster Punkt für Strich und zweiter für festen Hintergrund. Linke und rechte Grenze verstecken.

Kavya Shravan
quelle
2

Der einfachste Weg, Ränder hinzuzufügen, um die Ränder mit einzufügen InsetDrawable, zeigt nur den oberen Rand:

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetBottom="-2dp"
    android:insetLeft="-2dp"
    android:insetRight="-2dp">
    <shape android:shape="rectangle">

        <solid android:color="@color/light_gray" />
        <stroke
            android:width=".5dp"
            android:color="@color/dark_gray" />
    </shape>
</inset>
Zaid Mirza
quelle
2

Datei zu res / drawable hinzufügen

<?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:left="-2dp" android:right="-2dp">
            <shape android:shape="rectangle">
                <stroke
                    android:width="1dp"
                    android:color="#000000" />
            </shape>
        </item>
    </layer-list>

In Link zu dieser Datei auf Hintergrund Immobilien

Oleg
quelle
1

Versuchen Sie, das Bild mit einem linearen Layout zu versehen, und stellen Sie den Hintergrund auf die gewünschte Rahmenfarbe um den Text ein. Stellen Sie dann die Auffüllung in der Textansicht auf die gewünschte Dicke für Ihren Rand ein.

Matt
quelle
1

Sie können auch einen 9-Pfad verwenden, um Ihre Arbeit zu erledigen. Erstellen Sie es so, dass farbige Pixel nicht in der Höhe multiplizieren, sondern nur das transparente Pixel.

Kowlown
quelle
1
<shape xmlns:android="http://schemas.android.com/apk/res/android">

<solid android:color="@color/light_grey1" />
<stroke
    android:width="1dip"
    android:color="@color/light_grey1" />

<corners
    android:bottomLeftRadius="0dp"
    android:bottomRightRadius="0dp"
    android:topLeftRadius="5dp"
    android:topRightRadius="5dp" />

    </shape>
Vinoj Vetha
quelle
1

Fügen Sie einfach Ansichten oben und unten am hinzu View

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/your_color"
        app:layout_constraintBottom_toTopOf="@+id/textView"
        app:layout_constraintEnd_toEndOf="@+id/textView"
        app:layout_constraintStart_toStartOf="@+id/textView" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:gravity="center"
        android:text="Testing"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/your_color"
        app:layout_constraintEnd_toEndOf="@+id/textView"
        app:layout_constraintStart_toStartOf="@+id/textView"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

</android.support.constraint.ConstraintLayout>
Levon Petrosyan
quelle
0
// Just simply add border around the image view or view

<ImageView
                android:id="@+id/imageView2"
                android:layout_width="90dp"
                android:layout_height="70dp"
                android:layout_centerVertical="true"
                android:layout_marginRight="10dp"
                android:layout_toLeftOf="@+id/imageView1"
                android:background="@android:color/white"
                android:padding="5dip" />

// After that dynamically put color into your view or image view object

objView.setBackgroundColor(Color.GREEN);

//VinodJ/Abhishek
Vinod Joshi
quelle
-1
<TextView
    android:id="@+id/textView3"
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="#72cdf4"
    android:text=" aa" />

Fügen Sie diese Textansicht einfach unter dem Text hinzu, in dem Sie den Rahmen hinzufügen möchten

Aquib Maniyar
quelle
-1

Nur um die Antworten von @phreakhead und user1051892 durchzusetzen <item android:bottom|android:left|android:right|android:top>, müssen die Antworten, falls sie negativ sind, größer sein als <stroke android:width>. Wenn nicht, wird das Bild des Gegenstands mit dem Bild des Strichs gemischt, und Sie denken möglicherweise, dass diese Werte nicht funktionieren.

Garry Dias
quelle