LinearLayout:layout_gravity =“bottom”不在Horizo​​ntal LinearLayout上工作

时间:2011-07-04 19:32:49

标签: android

好的,首先,我搜索了所有的互联网,但没有人有类似的问题。所以,我想要的只有3个textViews,底部与屏幕对齐,宽度相同。这是一张代表我想要的图像:

enter image description here

这是我的代码:

 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent">
 <LinearLayout 
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_alignParentBottom="true">

      <TextView 
           android:text="@string/help_1"
           android:layout_weight="0.33"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:background="@drawable/mynicebg1"

           android:layout_gravity="bottom"/>

      <TextView 
           android:text="@string/help_2"
           android:layout_weight="0.33"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:background="@drawable/mynicebg2"

           android:layout_gravity="bottom"/>

      <TextView 
           android:text="@string/help_3"
           android:layout_weight="0.33"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:background="@drawable/mynicebg3"

           android:layout_gravity="bottom"/>

 </LinearLayout>
 </RelativeLayout>

嗯,它适用于3个textViews具有相同的高度,但当它们的大小不同时,我得到以下结果:

problem

另一个奇怪的行为是,当我将最大文本的layout_gravity设置为“center-vertical”时,我得到以下结果:

first workaround

很明显,我疯了,尝试了另一种中心垂直组合,但最初没有任何效果:

desperation workaround

那么,关于如何解决这个问题的任何提示?

7 个答案:

答案 0 :(得分:103)

正确答案

所有其他答案都错了。重点:

  1. 您不需要RelativeLayout。您只需LinearLayout
  2. 即可完成此操作
  3. (不重要,但我猜你不知道)你的体重不需要总和为1,你可以将它们全部设置为任何相等的值(例如1)。
  4. 关键是您需要 android:baselineAligned="false" 。我实际上只是通过查看LinearLayout来源找到了这个。它在文档中,但他们没有提到默认情况下它是
  5. 无论如何,这是代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:baselineAligned="false">
          <TextView 
               android:text="dfg dfg dfg dfg dfg dfg dfg dfg dfg dfg dfg dfg dfg dfg dfg dfg dfg dfg dfg dfg"
               android:layout_weight="1"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:background="#eeffee"
               android:layout_gravity="bottom"/>
    
          <TextView 
               android:text="asd asd asd asd asd asd asd asd asd asd"
               android:layout_weight="1"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:background="#eeeeff"
               android:layout_gravity="bottom"/>
    
    
          <TextView 
               android:text="qweoiu qweoiuqwe oiqwe qwoeiu qweoiu qweoiuq weoiuqw eoiquw eoiqwue oqiweu qowieu qowieu qoiweu qowieu qowieu qowieu qowieu qoiweu qowieu qoiwue "
               android:layout_weight="1"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:background="#ffeeee"
               android:layout_gravity="bottom"/>
    
     </LinearLayout>
    

    它看起来如何:

    Good linear layout

答案 1 :(得分:4)

确定。所以我遇到了同样的问题,但是使用切换按钮而不是文本视图。出于某种原因,如果LinearLayout(Horizo​​ntal)中的一个元素的高度与布局中其余视图的高度不同,并且设置为与其他元素具有相同的重力,则有效地“忽略”重力。

我设法通过将每个视图包装在RelativeLayout中来设置所需的行为,并在相对布局上设置android:gravity而不是每个按钮上的android:layout_gravity。我还将android:layout_weight从按钮移动到相对布局。

所以不要:

<LinearLayout
  ... >
    <ToggleButton
        ...
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_weight="1"
        android:layout_gravity="bottom"/>


    <ToggleButton
        ...
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_weight="1"
        android:layout_gravity="bottom"/>

    <ToggleButton
        ...
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_weight="1"
        android:layout_gravity="bottom"/>
</LinearLayout>

这给出了与报告相同的问题,而是做了:

<LinearLayout
  ... >
    <RelativeLayout
        ...
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="bottom" >

        <ToggleButton
            ...
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            />

    <RelativeLayout
        ...
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="bottom" >

        <ToggleButton
            ...
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
           />      

    <RelativeLayout
        ...
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="bottom" >

        <ToggleButton
            ...
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            />
</LinearLayout>

答案 2 :(得分:1)

**编辑:

如果这不能解决所有问题,请添加Timmmmm下面的答案之一中提到的baselinealigned标志。这是一种更好的方法。

使用此

编辑布局: 好的我编辑了它,并添加了颜色和重力,让底部的文本视图具有相同的高度和宽度,并且还使每个视图底部和中心的文本相邻。

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:gravity="fill_vertical" >

        <TextView  
            android:layout_width="match_parent" 
            android:layout_height="match_parent"
            android:layout_weight="1.0"
            android:layout_gravity="fill_vertical"
            android:gravity="bottom|center"
            android:text="text1 jkjhh  jhguk jvugy v ghjv  kjhvygvusdioc jgytuayhashg hgyff"
            android:textColor="#000000"
            android:background="#FFFF00"
            />
        <TextView  
            android:layout_width="match_parent" 
            android:layout_height="match_parent" 
            android:layout_weight="1.0"
            android:layout_gravity="fill_vertical"
            android:gravity="bottom|center"
            android:text="t2"
            android:textColor="#000000"
            android:background="#FF0000"
            />      
        <TextView  
            android:layout_width="match_parent" 
            android:layout_height="match_parent" 
            android:layout_weight="1.0"
            android:layout_gravity="fill_vertical"
            android:gravity="bottom|center"
            android:text="This is a long text. This is a long text. This is a long text. This is a long text.This is a long text. This is a long text. This is a long text."
            android:textColor="#000000"
            android:background="#00FF00"
            />
    </LinearLayout>

它应该完全按照你的要求行事。

它在RelativeLayout中使用LinearLayout,但有时需要将它们嵌套以获得我们想要的内容。在相对布局中添加您可能需要的任何其他视图,只要RelativeLayout中的最后一个子项是如上所示的LinearLayout,您将始终将文本放在底部。

答案 3 :(得分:1)

与Timmm的答案相同,但您也可以android:gravity="bottom"使用LinearLayout android:layout_gravity="bottom"属性而不是TextView {/ 1}}。

像这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal"
      android:gravity="bottom"
      android:baselineAligned="false">
      <TextView 
           android:layout_width="0dp"
           android:layout_height="wrap_content"
           android:text="your text 1......"
           android:layout_weight="1"/>

      <TextView 
           android:layout_width="0dp"
           android:layout_height="wrap_content"
           android:text="your text 2......"
           android:layout_weight="1"/>

      <TextView 
           android:layout_width="0dp"
           android:layout_height="wrap_content"
           android:text="your text 3......"
           android:layout_weight="1"/>

</LinearLayout>

答案 4 :(得分:0)

如果你没有使用RelativeLayout而不是Linear,那我就会这样做,我想:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/LinearLayout1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TextView android:layout_height="wrap_content"
    android:layout_width="fill_parent" android:text="@string/hello"
    android:id="@+id/TextView1" android:layout_above="@+id/TextView2"
    android:layout_alignLeft="@+id/TextView2"></TextView>

<TextView android:layout_height="wrap_content"
    android:layout_width="fill_parent" android:text="@string/hello"
    android:id="@+id/TextView2" android:layout_alignParentBottom="true">  </TextView>

</RelativeLayout>

答案 5 :(得分:0)

如果你想让所有三个子视图的高度相同,那么将height更改为“0”,将LinearLayout的android:weightSum设置为3,并将每个视图的android:layout_weight设置为1。

答案 6 :(得分:0)

一个更简单的解决方案是使用 标签:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="wrap_content">

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

      <TextView 
           android:text="Any Text"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:background="#eeffee"/>

      <TextView 
           android:text="Any Text2"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:background="#eeeeff"/>


      <TextView 
           android:text="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:background="#ffeeee"/>

 </LinearLayout>