2011-03-30 17 views
21

İki düğmeyle birlikte göreceli bir düzenim var. Bunlar hem RelativeLayouts hem de birkaç düğme ve şeyler içeriyor. Bu çocuk düzenleri benim ana düzenimde ortalanmış değil ve ana düzende bu ikisinin yanlarında başka şeyler de var. İlki ikincisinin üstünde olmak istiyorum. Bu yeterince kolay, sadece ikinci bir android:layout_below="@+id/firstLayout" kullanın. Ama aynı zamanda ikincisinin ilkinin ortasına hizalanmasını istiyorum. Demek istediğim, ikinci düzeni ilkinin merkezini bulmak ve kendisini merkezin aynı x pozisyonunda olacak şekilde hizalamak istiyorum. AlignLeft, alignRight, alignTop ve alignBaseline'ı görüyorum, ancak merkez yok. Bu, ikinci düzenini bazılarının üzerine kaydırmak için bir marjı kodlamak zorunda kalmadan yapmak mümkün mü?Android Relative Layout alignCenter başka bir görünümden

Sonunda yapmaya çalıştığım şeyin kaba bir örneğidir, mavi çubuk ilk düzen olur ve kırmızı kutu ikinci düzen olur. İkisini de "wrap_content" e eşit büyüklükte olan ve ardından ikinci bir model için centerHorizontal = "true" kullanan başka bir Relative düzeninde ikram edebileceğimi biliyorum. Ama ikisini de ana düzenimin çocukları olarak bırakmayı tercih ediyorum (eğer çocuklarımın ayrı bir mizanpajı oluşturursam, uyguladığımın bazı kısımlarında bazı değişiklikler yapmalıyım. Bundan kaçınmaya çalışıyorum.)

Example of what I want

cevap

8

siz "wrap_content" sonra

+2

Sanırım genişliğini kastediyorsunuz. Ancak bu yaklaşım işe yaramaz çünkü ana düzen içinde başka şeyler de vardır. Ve bu iki çocuk aslında ebeveynin bir tarafında. – FoamyGuy

+1

Evet, genişliğim var. Belki ilk göreli düzenin (mavi kare) solunda ve sağında bir düzen daha yerleştirebilir ve merkezdeki kırmızı kareyi – Maxim

+0

içine koyabilirsiniz. Bu gerçekten işe yarayabilir. Uygulamamın java kısmının çalışacağını biliyorum, şimdi ana düzen ebeveyninin içinde kalmak için mavi çubuk düzenine ihtiyacım var.Ama sanırım yeni bir ebeveyne sadece kırmızı olanı koyursam hiçbir değişiklik yapmam gerekmeyecek. – FoamyGuy

-3

Bunun gibi set ortalamak için her iki çocuk düzenleri koyabilirsiniz için ebeveyn düzeni genişliğini ayarlayabilirsiniz ise:

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


    <View 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/bottomHolder" 
     android:layout_alignParentTop="true" 
     android:layout_centerInParent = "true"/> 

    <View 
     android:id="@+id/bottomHolder" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true"/> 

</RelativeLayout> 
+1

Soruyu okuyun: "Bu çocuk düzenleri ana düzende ortalanmıyor". – Karu

1

tek çözüm için çalıştı ben sardım Daha büyük bileşenin boyutu olan bir FrameLayout hem bileşenler ve dikey merkez hizalama için bu fe kullanıyoruz metinler için mülk

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/red_component" 
     android:layout_width="100dp" 
     android:layout_height="100dp"/> 

    <View 
     android:id="@+id/blue_component" 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:layout_gravity="center" /> 

</FrameLayout> 
0

kullanarak FrameLayout merkezinde ikinci bileşeni ayarlayın:

android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:gravity="center_vertical" 
android:layout_alignTop="@id/theBigOne" 
android:layout_alignBottom="@id/theBigOne" 
android:layout_toRightOf="@id/theBigOne" 
1

Bazen, istediğiniz görünüme alignLeft ve alignRight'u ayarlayabilir ve ardından ortalamak istediğiniz öğede yerçekimi kullanabilirsiniz. Örneğin

:

android:layout_below="@+id/firstLayout" 
android:layout_alignLeft="@+id/firstLayout" 
android:layout_aligntRight="@+id/firstLayout" 
android:gravity="center" 

bileşeni değilse bir TextView (veya arka plan gerekmez bir görünüm) daha sonra yukarıdaki özelliklere sahip bir FrameLayout sarın olabilir.

<MyView id="@+id/firstLayout" .. other props/> 

<FrameLayout 
    ... other props 
    android:layout_below="@+id/firstLayout" 
    android:layout_alignLeft="@+id/firstLayout" 
    android:layout_aligntRight="@+id/firstLayout" 
    android:gravity="center" > 

    <MyView id="@+id/myAlignedView" ..other props /> 

</FrameLayout> 

Bu şekilde, alttan görünüşüdür üst aynı genişliğe sahip bir çerçeve olacak, ama içine genişliğine ortalanmış bir görünümü olacaktır.

Elbette bu yalnızca hangisinin daha büyük bir görünüm olduğunu biliyorsanız çalışır. Değilse, Laranjeiro'nun yanıtladığı gibi, her iki içeriği de ortalanmış yerçekimi ile başka bir düzende sarın.

İlgili konular