2014-10-27 2 views
2
<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:text="left" /> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:text="center" /> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="end" 
      android:text="right" /> 
    </LinearLayout> 

Я знаю, что я могу также использовать RelativeLayout и установить alignparentRight = истинный, чтобы правая кнопку справа от этого родителя , Но я просто хочу знать, если я использую LinearLayout, как я могу сделать правильную кнопку справа от ее родителя? любая помощь спасибопочему правая кнопка может не на праве родителей, как левая кнопка слева от родительского

+0

да, но это не работает. и я действительно хочу знать, почему – lightman1988

ответ

7

Если у вас есть только три или два ребенка, вы можете использовать FrameLayout вместо LinearLayout. Но если вы хотите использовать LinearLayout сделать как этот

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <Button 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="left" /> 

    <Button 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="center" /> 

    <Button 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="right" /> 

</LinearLayout> 

Использование FrameLayout в качестве родителя

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left|center_vertical" 
     android:text="left" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="center" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right|center_vertical" 
     android:text="right" /> 

</FrameLayout> 

Почему layout_gravity="right" не работает для горизонтального LinearLayoutexplained here

Для горизонтального линейного макете следующие значения имеют смысл:

  • сверху
  • центр
  • дно

Это потому, что дети горизонтального линейного макета укладываются горизонтально друг за другом. Единственное, что можно контролировать с помощью андроида: layout_gravity - это то, как показано детское представление по вертикали.

В течение вертикальных Linear Layout следующих значений имеет смысл:

  • покинул
  • центра
  • право

Это происходит потому, что дети по вертикали Линейная компоновка выложена вертикально один под другим. Единственное, что можно контролировать с помощью андроида : layout_gravity - это то, как детское представление позиционируется горизонтально.

+0

спасибо, и если я использую LinearLayout, как вы говорите, без свойства Layout_gravity, он также работает, потому что layout_weight.but спасибо – lightman1988

+0

в 'LinearLayout' не требуется' layout_gravity' только 'layout_weight' требуется – kId

+0

да, но мой вопрос есть, если у меня есть две кнопки в горизонтальном LinearLayout (android: layout_width = "match_parent"), один layout_gravity = "left", другой - layout_gravity = "right", поэтому правая кнопка не может находиться справа от ее родителя. Я очень смутил это. – lightman1988

0

Поместите центральную кнопку в RelativeLayout с весом 1 так, чтобы центральная компоновка занимала всю площадь.

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="left" /> 
    <RelativeLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:gravity="center"> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="center" /> 
    </RelativeLayout> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="right" /> 
</LinearLayout> 

Для двух кнопок

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="left" /> 
    <RelativeLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:gravity="right"> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="right" /> 
    </RelativeLayout> 
</LinearLayout> 
+0

спасибо, он работает. но если у меня есть только два ребенка в LinearLayout, как их сделать, один слева от родителя, другой справа от родителя. как я могу установить layout_gravity? – lightman1988

+0

и если я установил RelativeLayout, он просто не работает. – lightman1988

+0

. Для двух кнопок вы можете удалить третью кнопку и поместить андроид: gravity = «right» на RelativeLayout – Naveen

0

Почему бы не использовать веса,

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="100" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:gravity="left" 
     android:layout_weight="33" 
     android:orientation="vertical" > 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="left" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:layout_weight="34" 
     android:orientation="vertical" > 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="center" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="33" 
     android:gravity="right" 
     android:orientation="vertical" > 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="right" /> 
    </LinearLayout> 
</LinearLayout> 

И если у вас есть две кнопки

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="100" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:gravity="left" 
     android:layout_weight="50" 
     android:orientation="vertical" > 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="left" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="50" 
     android:gravity="right" 
     android:orientation="vertical" > 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="right" /> 
    </LinearLayout> 
</LinearLayout> 

Примечание: Implementi Этот способ включает много макетов, которые нужно добавить, и вызовет проблемы, когда приложение будет довольно тяжелым. Всегда рекомендуется использовать Relative Layout.

+0

спасибо, но я тоже был смущен, как использовать layout_gravity? почему я установил layout_gravity = "right" на правую кнопку, но он не работает. – lightman1988

+1

Плохая идея. Мы не должны использовать слишком много макетов, если один может выполнить эту работу. Количество макетов влияет на производительность приложения и даже вызывает сбои, если глубина слишком велика. Вместо этого используйте относительную компоновку. Любые особые требования к использованию линейной компоновки? – Rohit5k2

+0

@ Rohit5k2 Спасибо, что указали это. Я добавлю заметку о своем ответе. Но ответ был так, чтобы показать OP обходное решение. OP уже знал, что нужно использовать Relative Layout. – codePG

0

Использование

Relative layout instead of 
linear layout. 

и использовать layout_alignParentRight сделать это право родителя.

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:text="left" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:text="center" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:text="right" /> 
</RelativeLayout> 
+0

Кажется, он уже знал этот метод. Он просто хотел попробовать то же самое с Linear Layout. Пожалуйста, прочитайте вопрос полностью! – codePG

+0

спасибо, я знаю это. Но я просто хочу знать, если я использую LinearLayout, как я могу сделать правильную кнопку справа от ее родителя? – lightman1988

0

Другим способом сделать это, если вы не хотите потенциальный перекрывающийся причины по FrameLayout или RelativeLayout и все еще хочет использовать wrap_content ширины, которые вы не можете, если вы расположите взгляды должным образом в RelativeLayout, чтобы избежать дублирования:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" > 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="left" /> 

    <View 
     android:layout_width="0dp" 
     android:layout_height="1dp" 
     android:layout_weight="1" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="center" /> 

    <View 
     android:layout_width="0dp" 
     android:layout_height="1dp" 
     android:layout_weight="1" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="right" /> 

</LinearLayout> 

Этот метод является довольно распространенным и используется (по крайней мере, последний раз я проверил это) AlertDialog в AppCompat Lib