2012-09-10 12 views
8

Ich habe ein Layout und muss eine der Ansichten in der Mitte platzieren. Es ist einfach. Das Problem ist, dass ich auch einige andere Ansichten habe, die oben auf dem Bildschirm positioniert werden müssen.Ansicht in der Mitte des Layouts, wenn genug Platz ist

Problem: Wenn es genug Raum ist es in Ordnung aussieht, aber wenn der Bildschirm zu klein ist, die oberen und mittleren Elemente überlappen.

Frage: Wie wird das "zentrierte" Element gedrückt, wenn der Bildschirm zu klein ist?

Das ursprüngliche Layout sehr komplex ist, bereitete ich ein Beispiel:

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

<TextView 
    android:id="@+id/theOneAtTheTop" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Some long text which may overlap the lower view. Some long text which may overlap the lower view." 
    android:layout_alignParentTop="true" 
    /> 


<TextView 
    android:id="@+id/theOneInTheMiddlep" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Some long text which may overlap the upper view. Some long text which may overlap the upper view. " 
    android:layout_centerInParent="true" 
    /> 


</RelativeLayout> 

Hier ist eine kleine Simulation. Das mittlere Bild zeigt, wie es auf einem kleinen Bildschirm aussieht, und die Bilder auf den Seiten zeigen die gewünschte Situation.

+0

legen Sie einen Screenshot und den Layout-Code. –

+0

posten Sie Ihren XML-Code –

+0

Ich postete xml, wird ein Bild in einer Minute vorbereiten. Original XML ist zu komplex, es wäre schwierig, den Punkt zu bekommen –

Antwort

1

Nun, ich ändere diese Antwort vollständig. Wenn die gewünschte Ausrichtung vertikal ist, können Sie Ihren Code in ein RelativeLayout setzen, das _fill_parent_ lautet und unter theOneAtTheTop lautet. Darin können Sie die Ansicht, die Sie vertikal zentriert ausrichten möchten.

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

    <TextView 
     android:id="@+id/theOneAtTheTop" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:text="Some long text which may overlap the lower view. Some long text which may overlap the lower view." /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/theOneAtTheTop" > 

     <TextView 
      android:id="@+id/theOneInTheMiddlep" 
      android:layout_width="200sp" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:text="Some long text which may overlap the upper view. long text which may overlap the upper view. Some long text which may overlap the upper view. " /> 
    </RelativeLayout> 

</RelativeLayout> 

Hoffe, es hilft

+0

Um ehrlich zu sein, kann ich keinen Unterschied zwischen Ihrem Code und mir sehen –

+1

Sry, es ist weil ich den falschen Code gepostet habe (eigentlich, deinen vor Änderungen) –

+0

Nun, meine Antwort ist ähnlich wie bei Vinay, was mich fragen lässt: Willst du die Ansicht zentriert mit der horizontalen oder vertikalen Richtung? –

0

nur android:layout_below="@+id/theOneAtTheTop" auf den zweiten Textview hinzufügen und Sie sind gut zu gehen.

+0

Dies wird 'layout_centerInParent' überschreiben, so' theOneInTheMiddle' wird es nicht in der Mitte sein, wenn der Bildschirm groß genug ist –

+0

Richtig, Mein schlechtes. Die Präferenz vergessen –

1

Ich bezweifle, dass Sie das wirklich in der Layout-Datei direkt tun können als XML-Layout nicht der richtige Ort für eine solche bedingte Logik ist. Die einzige reale Situation, in der du (denke ich) die Layoutdatei verwenden könntest, wäre, wenn du wüsstest, dass die genauen Dimensionen der beteiligten Ansichten plus der API-Ebene der App 3.2 wären, was eine Menge Layouts für verschiedene Situationen schafft (was ich wirklich Zweifel).

Wenn Sie eine der Ansichten in einer RelativeLayout zentrieren, wird es zentriert, egal was, es hat nicht die Vorstellung von Überlagerungen auf der Xml-Layout-Dateiebene. Im Code ist eine andere Sache.

+0

Ja, meine Gedanken genau. Aber diese Plattform hat mich viele Male überrascht (meistens auf schlechte Weise;)), also denke ich, dass diese Frage immer noch eine Frage wert ist. Vielen Dank! –

Verwandte Themen