2017-02-17 12 views
0

У меня есть макет, как это:кнопка Android RelativeLayout перекрывающихся

Screenshot 1

я хочу сделать btn1 вертикального выравнивания к центру и элементов под ним будет подталкивать ниже также. Но после того, как я поставил android: layout_centerVertical в btn1, он был вертикально выровнен по центру, но элемент под ним не толкает вниз.

Layout после того, как я поставил андроид: layout_centerVertical = "истинный" в btn1:

Screenshot 2

Это мой XML:

<RelativeLayout 
    android:id="@+id/layout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <RelativeLayout 
     android:layout_centerVertical="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <Button 
       android:id="@+id/btn1" 
       android:layout_centerHorizontal="true" 
       android:layout_centerVertical="true" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="1" /> 

     <Button 
       android:id="@+id/btn2" 
       android:layout_centerHorizontal ="true" 
       android:layout_below="@id/btn1" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="Some Text 1" /> 



      <Button 
        android:id="@+id/btn3" 
        android:layout_below="@id/btn2" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:text="Some Text 2" /> 

      <Button 
        android:id="@+id/btn4" 
        android:layout_toRightOf ="@id/btn3" 
        android:layout_alignBottom="@id/btn3" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:text="Some Text 3" /> 

    </RelativeLayout> 

</RelativeLayout> 

Я знаю, что если я назначить достаточную высоту в родительском макета он будет работать нормально, но позже я сделаю эту форму динамически генерируемой. Любой способ сделать это автоматически нажатием на wrap_content?

+0

Простой способ с линейной компоновкой. Просто измените второй RelativeLyout с LinearLayout и добавьте один андроид: ориентация = «вертикальная» –

+0

Удалите внутреннюю 'RelativeLayout' –

ответ

0
<RelativeLayout 
    android:id="@+id/layout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <RelativeLayout 
     android:layout_centerInParent="true" 
     android:layout_centerVertical="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <Button 
       android:id="@+id/btn1" 
       android:layout_centerHorizontal="true" 
       android:layout_centerVertical="true" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="1" /> 

     <Button 
       android:id="@+id/btn2" 
       android:layout_centerHorizontal ="true" 
       android:layout_below="@id/btn1" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="Some Text 1" /> 



      <Button 
        android:id="@+id/btn3" 
        android:layout_below="@id/btn2" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:text="Some Text 2" /> 

      <Button 
        android:id="@+id/btn4" 
        android:layout_toRightOf ="@id/btn3" 
        android:layout_alignBottom="@id/btn3" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:text="Some Text 3" /> 

    </RelativeLayout> 

</RelativeLayout> 

добавить значение centerInParent к вашему относительному макету, как показан выше

0
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/layout1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<RelativeLayout 
    android:id="@+id/relativeLayout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true"> 


</RelativeLayout> 

<Button 
    android:id="@+id/btn1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/relativeLayout" 
    android:layout_alignBottom="@+id/relativeLayout" 
    android:layout_centerHorizontal="true" 
    android:text="1" /> 

<Button 
    android:id="@+id/btn2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/relativeLayout" 
    android:layout_centerHorizontal="true" 
    android:text="Some Text 1" /> 


<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/btn2" 
    android:layout_centerHorizontal="true"> 

    <Button 
     android:id="@+id/btn3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Some Text 2" /> 

    <Button 
     android:id="@+id/btn4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@id/btn3" 
     android:layout_toRightOf="@id/btn3" 
     android:text="Some Text 3" /> 

</RelativeLayout> 

0

Попробуйте это,

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/layout1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 


     <Button 
      android:id="@+id/btn1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:text="1" /> 

     <Button 
      android:id="@+id/btn2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/btn1" 
      android:layout_centerHorizontal="true" 
      android:text="Some Text 1" /> 

     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/btn2" 
      android:layout_centerHorizontal="true"> 

      <Button 
       android:id="@+id/btn3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Some Text 2" /> 

      <Button 
       android:id="@+id/btn4" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_toRightOf="@id/btn3" 
       android:text="Some Text 3" /> 
     </RelativeLayout> 

    </RelativeLayout> 
0

Просто удалите свой второй относительный макет или установить, что высоту макета и ширина до match_parent!