2013-05-12 18 views
12

Bir görünümü daha önce var olan başka bir görünüme göre ortalatılmış bir yatay veya dikey merkezli bir RelativeLayout XML ile hizalamak mümkün mü?RelativeLayout: align Diğer yatay görünüme göre ortalanmış yatay veya dikey görünüm

Örneğin

: Böyle bir şey yoktur diyelim:

ikinci metin görünümü ilk metin görünümü altında merkezli görüntülenen edilmelidir

enter image description here

:

<?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/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="72dp" 
     android:text="dynamic text" /> 

    <TextView 
     android:id="@+id/second" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView" 
     android:layout_marginLeft="43dp" <!-- Is there a rule to center it? --> 
     android:text="centered below text 1" /> 

</RelativeLayout> 

mi

uygulamak mümkündür XML'de böyle bir şey var mı? Henüz özlediğim bir kural var mı? Ben programlı

cevap

12

uygun izlediklerinizi kullanın ve ana düzeni eklemek konumunu hesaplamak istemiyoruz

<?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" > 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:gravity="center" 
     android:layout_marginLeft = "30dp"> 
     <TextView 
      android:id="@+id/textView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="dynamic text" /> 

     <TextView 
      android:id="@+id/second" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="centered below text 1" /> 
    </LinearLayout> 
... 
... 
other veiws go here 
... 

</RelativeLayout> 
+14

Hayır, bunu ana merkezde ortalamak istemiyorum – sockeqwe

+0

İhtiyacınız var – Noundla

+0

Cevabı değiştirdim. Bir kez kontrol et. – Noundla

4

(eğer varsa başka şeyler içerebilir) o görünümler için ayrı bir ebeveyn düzeni kullanın size

android:layout_centerHorizontal="true" 
    android:layout_centerInParent="true"  
    android:layout_centerVertical="true"  
+4

altına takılır ... Ben aşağıda veya belirli başka görünümünün üst ortalamak istiyorum. Örneğin: Diğer görünümde bir marginLeft = "72dp" – sockeqwe

+0

evet sadece centerhoarizontal = true kullanın ve bu görünümü başka bir – stinepike

+0

Hm'nin üzerine veya altına yerleştirin, belki sizi yanlış anlıyorum, ancak bu uygulamayı ortadaki ikinci metin görünümünde uygularım. Ama ben diğer görüşün altında ortalanmış olmasını istiyorum, bu yüzden ilk görüşe göre ortalanmış göreceli ne istediğimi ... Sanırım bu iki görüş bir başka RelativeLayout – sockeqwe

0

Öyle this->

<?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/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:text="dynamic text" /> 

    <TextView 
     android:id="@+id/second" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView" 
     android:layout_centerHorizontal="true" <!-- Is there a rule to center it? --> 
     android:text="centered below text 1" /> 

</RelativeLayout> 
0

bulundu Do Devriminin: Wrap başka RelativeLayout içine içerik ve sonra istediğiniz yere bu LayoutWrapper yerleştirebilirsiniz:

<?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" > 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="58dp" 
     android:layout_marginTop="58dp" > 

     <TextView 
      android:id="@+id/textView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerInParent="true" 
      android:text="dynamic text" /> 

     <TextView 
      android:id="@+id/second" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/textView" 
      android:layout_centerInParent="true" 
      android:text="centered below text 1" /> 
    </RelativeLayout> 

</RelativeLayout> 
20

Kabul olandan çok daha iyi bir çözüm var. EXTRA NESTING YOK! Bunu, küçük görünümde iki özelliği birleştirerek yapabilirsiniz. Yatay olarak merkezleme yapıyorsanız, daha büyük görünüme hem align_start & align_end kullanabilirsiniz. . Metin yerçekimi Btw merkezli olduğundan emin olun.: Dikey hizalama kullanımı hem align_top & align_bottom İçin "merkez "android = yerçekimi" aşağıya düzeni değiştirilmiş uygulamasıdır

<?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" 
android:paddingLeft="43dp" > 

<TextView 
    android:id="@+id/textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignStart="@+id/second" 
    android:layout_alignEnd="@+id/second" 
    android:gravity="center" 
    android:text="dynamic text" /> 

<TextView 
    android:id="@+id/second" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/textView" 
    android:gravity="center" 
    android:text="centered below text 1" /> 

</RelativeLayout> 

kabul gibi gereksiz yuvalama gerek yok. cevap.

+0

Evet, ancak bu yalnızca kenar boşluğunu ayarlamak için metin görünümünün genişliğini biliyorsanız çalışır. – sockeqwe

+0

Marja gerek yok .... Marj, başlangıçta sahip olduğunuz şey. Olan şey, daha küçük metnin genişliğinin daha büyük metne eşit olması ve yer çekim merkezine sahip olmasının görüntüyü daha geniş bir metin görüntüsüne göre ortalayacak olmasıdır. Bunu doğrulamak için, ikinci metin görünümünün kenar boşluğunu veya metnin içeriğini ekleyin ve ilkini de izleyin. – Jessicardo

+0

Ayrıca, açık kenar boşluğunu kaldırdım, düzen kapsayıcısına dolgu ekledim ve düzeni güncelledim. – Jessicardo

0

Doğru çözüm ben yatay bir RelativeLayout bir düğme altında bir TextView hizalamak için çalıştı ConstraintLayout

kullanmaktır ama align_bottom mümkün değildi ve layout_below birlikte iyi oynamadı. Nihayet ben pi Kısıtlı tıkıldıKalıcı ve aynı mantığı denedi ve bir çekicilik gibi çalıştı. İşte aşağıdaki kod. Hayır, ebeveyn içinde ortalamak istemiyorum

<android.support.constraint.ConstraintLayout 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:clipChildren="false" 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<Button 
    android:id="@+id/episode_recording_header_stop" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@mipmap/ic_launcher" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintEnd_toEndOf="parent" 
    app:layout_constraintStart_toStartOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.399" /> 


<TextView 
    android:id="@+id/button_selected_text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="8dp" 
    android:textAlignment="center" 
    android:textColor="@android:color/black" 
    android:textSize="12sp" 
    android:text="text which is exactly center aligned w.r.t the Button above" 
    app:layout_constraintEnd_toEndOf="@+id/episode_recording_header_stop" 
    app:layout_constraintStart_toStartOf="@+id/episode_recording_header_stop" 
    app:layout_constraintTop_toBottomOf="@+id/episode_recording_header_stop" 
    /> 

</android.support.constraint.ConstraintLayout> 

son çıkış

enter image description here

+0

Hizalamayı görebildiğiniz gibi ebeveyn veya başka bir görünüm değil, bağlantı görüntüsü (düğme). –

+0

Evet, ConstraintLayout'u bu gibi şeyler yapmaya izin verdiğinden kullanın (RelativeLayout) ... – sockeqwe

+0

@sockeqwe Kabul edilen cevap soruyu doğru cevaplamıyor mu? Ayrıca RelativeLayout'ta başka bir görünümün yatay olarak hizalanmasının mümkün olmadığının farkına varmam biraz zaman aldı. Doğru cevap şimdilik ConstraintLayout kullanmaktır. –

İlgili konular