2016-07-07 13 views
0

enter image description hereWie kann ich meine TextView-Positionierung ansprechen lassen?

In dem angezeigten Bild, die schwarze Sprechblase und der rote Hintergrund dahinter ist ein einziges ImageView, die die Breite eines vertikalen Handy-Bildschirm überspannt. Das "Hallo" ist ein TextView und das Layout ist relativ. Mithilfe von Rändern konnte ich das "Hallo" in der Sprechblase in meinem Android-Emulator positionieren - aber die Positionierung ist deaktiviert, wenn ich ein anderes Telefon emuliere.

  1. Gibt es einen besseren Weg, um mein TextView
  2. ist es eine Möglichkeit, es als Reaktion auf machen zu positionieren (so dass das Hallo ist immer in die Sprechblase, egal, was das Gerät)?

Hier ist meine xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/relativeLayout"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/mainGraphic" 
     android:src="@drawable/finished2" 
     android:layout_marginBottom="97dp" 
     android:layout_above="@+id/enterValue" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:maxWidth="200dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:id="@+id/helloText" 
     android:textColor="#FFFFFF" 
     android:layout_marginEnd="29dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentEnd="true" 
     android:layout_marginTop="45dp" /> 

</RelativeLayout> 
+0

ist das 9-Patch-Bild? –

Antwort

0

ich einen FrameLayout anstelle des RelativeLayout mit gleicher Größe wie das Bild verwenden würde. Verwenden Sie dann die Attribute android:layout_gravity="center" und android:gravity="center" für das TextView.

0

Try this:

... 
    <TextView 
     android:maxWidth="200dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:id="@+id/helloText" 
     android:textColor="#FFFFFF" 
     android:layout_alignTop="@+id/mainGraphic" 
     android:layout_alignBottom="@+id/mainGraphic" 
     android:layout_alignLeft="@+id/mainGraphic" 
     android:layout_alignRight="@+id/mainGraphic" 
     android:gravity="center" /> 
... 
0

beste Ansatz ist 9-Patch-Bild verwenden & es als Hintergrund des Textview gesetzt. Wenn Sie eine normale PNG-Datei verwenden, können wir nicht garantieren, dass sie bei allen Auflösungen korrekt ausgerichtet wird. & Sie kann bei der Dehnung unscharf werden.

9-Patch-Bild wird automatisch angepasst, um den Inhalt der Ansicht und die Größe des Bildschirms anzupassen. Android SDK bietet ein Tool zum Erstellen von 9-Patch-Bildern, die in SDK SDK/Tools-Verzeichnis ist. Siehe https://developer.android.com/studio/write/draw9patch.html.

0

Sie sollten einen 9-Patch für die Nachrichtenform verwenden. Sie können die Stammansicht Ihres Layouts als FrameLayout erstellen und dann einen TextView hinzufügen. Legen Sie die Nachrichtenform Nine-patch als Hintergrund des TextView fest.

Zum Erstellen der 9-Patch Besuch https://romannurik.github.io/AndroidAssetStudio/nine-patches.html von Roman Nurik. Laden Sie einfach eine PNG-Datei des Image-Assets hoch und wählen Sie die xhdpi Definition für die besten Ergebnisse. Der Nine-Patch hat 3 Haupteigenschaften -

Stretch-Regionen: Definiert, welche Bereiche des Objekts zur Anpassung an unterschiedliche Bildschirmdichten gedehnt werden können.

Inhalt Auffüllen: Definiert den Auffüllbereich für den Inhalt (Text), der im Bild erscheinen soll.

Optische Grenzen: Definiert, wie viel Fläche optisch um das Asset herum sichtbar sein soll.

Pros Neun-Patches verwenden:

  • Scalable
  • Einfach zu bedienen
  • Leichte
  • Jede Menge an Inhalt in es gesetzt werden.

Hoffe das hilft.

+0

Danke für die Antwort! Das 9-Patch war knifflig, weil es nur aufgrund des relativen Layouts in bestimmten Größen gerendert werden würde und ich musste immer noch in der XML-Datei nachsehen, wo der Text innerhalb des Patches beginnen sollte. Aber es hat das Problem verbessert. – callynx

+0

Ich habe nicht verstanden, was Sie mit "es würde nur in bestimmten Größen (aufgrund der relativen Layout?) Render". Sie sollten kein Problem damit haben, den Text im Root-Layout zu schnüren. Können Sie genau angeben, was Sie tun? Danke – Siddharth2092

+0

Hier ist ein kurzer Screenshot: http://imgur.com/DbYiS1Q. Die Textblase möchte nur diese Größe haben oder aber die gesamte Bildschirmbreite ausfüllen. Während ich diese Breite aber 2/3 dieser Höhe brauche. Aber es wird nicht die Größe ändern. Code: callynx

0

Idealerweise sollten Sie einen vollständigen roten Hintergrund für RelativeLayout und ein schwarzes 9patch-Bild für TextView verwenden. Aber wenn Sie möchten, dass RelativeLayout den Hintergrund rot mit Sprechblase hat, müssen Sie es zur Laufzeit einstellen.

Berechnen Sie die Höhe und Breite von RelativeLayout zur Laufzeit sagen 150px und 300px jeweils. Schauen Sie sich das Hintergrundbild genau an und bestimmen Sie die Kantenpunkte der Blase von oben, rechts, unten und links. Beispiel: Wenn die Bildhöhe 100px von 200px ist und der obere Rand bei 30px beginnt und der untere Rand bei 70px endet, beginnt die rechte Kante bei und die linke Kante endet bei 250px. Berechnen Sie auch die Breite und Höhe von TextView.

Ändern Sie zur Laufzeit die Position von TextView basierend auf den obigen Zahlen.

Verwandte Themen