2011-09-04 86 views
9

我試圖做一個Android佈局:垂直LinearLayout內的3個組件。中心組件是ScrollView,其中包含TextView。當TextView包含文本的顯著量(超過可適合在屏幕上),該ScrollView一路增長到屏幕的底部,顯示滾動條,並推動最後一個組件,具有Button一個LinearLayout內,關屏幕。

如果ScrollView中的TextView內部的文本足夠短,屏幕底部的按鈕就會完美定位。

我想要實現的佈局是:ScrollView和LinearLayout的困難

​​

爲我寫的佈局的XML是:

<?xml version="1.0" encoding="UTF-8"?> 

<LinearLayout 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_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="#FFFFFF" 
      android:layout_marginLeft="10dip" 
      android:layout_marginRight="10dip" 
      android:layout_marginTop="10dip" 
      android:layout_marginBottom="10dip" 
      android:text="Title /> 

    <ScrollView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 

     <TextView android:id="@+id/text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:autoLink="web" 
       android:textColor="#FFFFFF" 
       android:background="#444444" 
       android:padding="10dip" /> 

    </ScrollView> 

    <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1"> 

     <LinearLayout 
       android:orientation="horizontal" 
       android:layout_width="0dip" 
       android:layout_height="wrap_content" 
       android:layout_weight="1"/> 

     <Button android:id="@+id/login_button" 
       android:layout_width="0dip" 
       android:layout_height="wrap_content" 
       android:layout_gravity="bottom" 
       android:layout_weight="1" 
       android:text="@string/next_button"/> 

    </LinearLayout> 

</LinearLayout> 

回答

6

滾動視圖是第二視圖對象和設置爲比屏幕更多的wrap_content。

我推薦一個RelativeLayout的。頂級的TextView先用android:alignParentTop="true",接下來android:alignParentBottom="true"底部的LinearLayout,並在XML列在最後與價值android:alignBelow="@id/whatYouCallTheHeader滾動視圖。

這將對齊在屏幕的底部的底杆,和在頂部的標題,無論大小。然後在頁眉和頁腳被放置後,滾動視圖將有自己的位置。

+0

如果你正在寫1.6作爲目標它只會讓一個通過XML,所以任何引用都有它被引用前進行佈局。 2.1+進行兩次傳球。 – Phobos

2

你應該去的RelativeLayout而非LinearLayout中。你可以使用像alignBelow和all的一些屬性。

2

嘗試增加布局重入ScrollView即。

<ScrollView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1"> 

這個工作對我來說幾乎等同於你呈現一個一個的情況,但留給我不知道爲什麼,因爲這是違反直覺的,從0增加控制的佈局重量(如果你默認不要指定layout_weight)爲1應該使已經使用太多空間的控件變小。

我懷疑它的工作原理是,通過不指定layout_weight,你實際上允許佈局忽略相對於其他控件的滾動視圖的大小,相反如果指定了一個,則允許它按比例縮小它您分配的權重。

2

![固定頁眉頁腳和滾動體佈局] [1]


這是你在找什麼。 Android中的大部分應用都有這種佈局, 有一個固定的頁眉和頁腳以及一個可滾動的主體。此佈局的XML是


<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
     android:background="#5599DD" 
     android:layout_height="fill_parent"> 
     <!-- Header goes here --> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="#FFFFFF" 
      android:layout_marginLeft="10dip" 
      android:layout_marginRight="10dip" 
      android:layout_marginTop="10dip" 
      android:layout_marginBottom="10dip" 
      android:textSize="20sp" 
      android:layout_gravity="center" 
      android:text="Title" /> 
     <!-- Body goes here --> 
     <ScrollView 
      android:layout_weight="1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
      <TextView 
       android:id="@+id/text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:autoLink="web" 
       android:text="@string/lorem_ipsum" 
       android:textColor="#FFFFFF" 

       android:padding="10dip" /> 
     </ScrollView> 
     <!-- footer goes here --> 
     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
      <RelativeLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 
       <Button 
        android:id="@+id/login_button" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:layout_gravity="bottom" 
        android:layout_alignParentRight="true" 
        android:text="Button"/> 

      </RelativeLayout> 
    </LinearLayout> 
</LinearLayout>