2011-07-04 84 views
0

我有一个布局在纵向模式下工作。然而,它没有显示,因为我想在风景模式:Android的RelativeLayout和按钮问题

Portrait mode

Landscape mode

这里是.xml文件的概要:

<RelativeLayout> 

    <LinearLayout android:orientation="horizontal"> 
     <TextView /> 
     <TextView /> 
    </LinearLayout> 

    <TextView /> 

    <LinearLayout android:orientation="vertical"> 

     <LinearLayout android:orientation="horizontal"> 

      <LinearLayout android:orientation="vertical"> 
       <TextView /> 
       <TextView /> 
      </LinearLayout> 

      <LinearLayout android:orientation="vertical"> 
       <Spinner /> 
       <Spinner /> 
      </LinearLayout> 

     </LinearLayout> 

    </LinearLayout> 

    <Button/> 

</RelativeLayout> 

这里是实际的。 xml文件

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

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

    <LinearLayout android:id="@+id/departure_block" 
     android:orientation="horizontal" android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:layout_marginTop="40px"> 

     <TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:textSize="17sp" 
      android:text="You are departing from " /> 

     <TextView android:id="@+id/editTextDepartureStation" 
      android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:text="" android:layout_weight="2" android:textSize="17sp" /> 
    </LinearLayout> 

    <TextView android:id="@+id/info_block" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:textSize="17sp" 
     android:layout_below="@id/departure_block" android:text="Please select remaining journey details: " 
     android:layout_marginTop="40px" /> 

    <LinearLayout android:orientation="vertical" 
     android:layout_width="fill_parent" android:layout_below="@id/info_block" 
     android:layout_height="fill_parent"> 

     <!-- Labels and widgets --> 
     <LinearLayout android:orientation="horizontal" 
      android:layout_width="fill_parent" android:layout_height="wrap_content" 
      android:layout_marginTop="20px"> 

      <!-- Labels --> 
      <LinearLayout android:orientation="vertical" 
       android:layout_width="fill_parent" android:layout_height="wrap_content" 
       android:layout_weight="2" android:paddingBottom="10px"> 

       <TextView android:layout_width="wrap_content" 
        android:layout_height="70px" android:text="@string/destinationStation" 
        android:layout_weight="2" android:paddingTop="15px" 
        android:textSize="17sp" /> 

       <TextView android:layout_width="wrap_content" 
        android:layout_height="70px" android:text="@string/numTickets" 
        android:layout_weight="2" android:paddingTop="15px" 
        android:textSize="17sp" /> 
      </LinearLayout> 
      <!-- End labels --> 

      <!-- Widgets --> 
      <LinearLayout android:orientation="vertical" 
       android:layout_width="fill_parent" android:layout_height="wrap_content" 
       android:layout_weight="1"> 

       <Spinner android:id="@+id/spinnerDestinationStation" 
        android:layout_width="fill_parent" android:layout_height="wrap_content" 
        android:prompt="@string/destination_prompt" android:layout_weight="1" 
        android:textSize="17sp" /> 


       <Spinner android:id="@+id/spinnerNumTickets" 
        android:layout_width="fill_parent" android:layout_height="wrap_content" 
        android:prompt="@string/numTickets_prompt" android:layout_weight="1" 
        android:textSize="17sp" /> 
      </LinearLayout> 
      <!-- End widgets --> 

     </LinearLayout> 
     <!-- End labels and widgets --> 

    </LinearLayout> 


    <Button android:id="@+id/buttonPurchase" android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:text="Purchase ticket" 
     android:layout_weight="1" android:textSize="17sp" android:background="@drawable/custom_button" 
     android:textColor="#ffffff" android:shadowColor="#000000" 
     android:shadowRadius="1.5" android:layout_gravity="bottom" 
     android:layout_alignParentBottom="true" android:shadowDx="1" 
     android:shadowDy="1" android:layout_margin="10px" /> 


</RelativeLayout> 

我明白了wh y按钮出现在旋钮的顶部(它正确对齐到父亲的RelativeLayout的底部),但是我不能创建可以停止重叠问题的XML。

我想任何滚动或ScrollView来封装按钮。如果按钮出现在显示屏的底部,只要可以通过滚动进行访问即可。这是我努力实现的。

任何人都可以帮忙吗?

非常感谢。

回答

1

也许你最好的选择是让相对布局可以滚动,我相信它被称为?这样用户可以使用他们的手指上下移动整个布局。

2

您的布局对于屏幕来说太大了,因此您必须将info_block包装在ScrollView中,并将其对齐到顶部以及其底部到按钮顶部。

这意味着您必须在info_block的前之前定义Button ,以便您可以将info_block的底部对齐按钮的顶部。

为了澄清,问题是你的info_block的底边不被绑定到任何东西,所以画出按钮,你会有一个优势。您应该始终先在相对布局中绘制固定元素,以便为未绑定元素提供边缘位置。

+0

你不需要把它放在一个滚动型为RelativeLayout的,可向滚动 –

+0

他希望该按钮被固定在底部为布局的一部分。那么你如何在这种情况下滚动info_block呢? –

+0

啊,错过了,你说的没错:) –

0

我将不得不明天检查,但fillViewport似乎是我想要的ScrollView属性。解释:ScrollView’s handy trick

编辑添加这确实解决了我的问题。这两件重要的事情是:

  1. 要在ScrollView中使用fillViewport =“true”,这可确保子元素展开以填充显示。仅凭这一点是不够的,接下来的事情,以确保:

  2. 的最后一个元素前的按钮机器人:layout_weight =“1.0”,以确保它填充有fillViewport =“真由滚动型创造的空间”。