相对布局导致格式化问题

时间:2011-07-08 19:48:27

标签: android xml layout landscape relative

我最近一直在为我的学校开发一个应用程序,并希望在发布它之前将其清理一下。在应用程序的调度部分,我有5个按钮,可以在同时在屏幕上的ListView上执行操作。但是,当我在屏幕上有大约6个或更多事件时,我遇到了问题,因为一旦列表视图占据屏幕并将按钮从屏幕上推下,使得我无法删除事件,创建新事件等等。

我尝试将列表视图设置为静态大小(400px),这对于正常屏幕方向有效,但如果手机设置为横向视图,则无法看到按钮。使用我当前的代码,它似乎可以在XML查看器中工作,但实际情况并非如此。

这是没有静态大小设置的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#551A8B"
    android:textColor="#FFD700"
    >



    <Button android:text="@string/New" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:id="@+id/button3">
    </Button>

    <Button android:text="@string/Edit" 
    android:id="@+id/button4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/button3"
    android:layout_alignTop="@id/button3">
    </Button>

    <Button android:text="@string/delete" 
    android:id="@+id/button5" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/button4"
    android:layout_alignTop="@id/button4">
    </Button>

        <Button android:layout_height="wrap_content" 
    android:id="@+id/button7" 
    android:layout_width="wrap_content" 
    android:text="@string/Previousweek"
    android:layout_below="@id/button3">
    </Button>

    <Button android:layout_height="wrap_content" 
    android:id="@+id/button6" 
    android:layout_width="wrap_content" 
    android:text="@string/Next"
    android:layout_below = "@id/button3"
    android:layout_toRightOf = "@id/button7">
    </Button>

    <ListView android:id="@+id/listView1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"  
    android:textColor="#FFD700"
    android:layout_below="@id/button7" 
    android:textSize="10sp" >
    </ListView> 


</RelativeLayout>

此代码的XML查看器是:

http://i.stack.imgur.com/HsF0F.jpg

这会让我相信它会运作良好。我在我的模拟器上测试了它,并在输入一堆愚蠢的事件之后获得了以下结果:

http://i.stack.imgur.com/giOu5.jpg

此结果与模拟器的多个版本一致。

有没有人对如何在不使用导致横向问题的静态大小限制的情况下解决此问题有任何想法?

感谢阅读,请询问我可能没有包含的更多信息。

4 个答案:

答案 0 :(得分:1)

将按钮分隔为单独的RelativeLayout并将其与ListView隔开LinearLayout

然后:

<LinearLayout android:id="@+id/linearLayout"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <RelativeLayout [...]
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <!-- Your buttons -->
  </RelativeLayout>
  <ListView android:id="@+id/listView1"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1" />
</LinearLayout

这里的关键点是ListView的身高和体重。这意味着在为按钮正确分配空间后,它会填充LinearLayout中的剩余空间。

答案 1 :(得分:0)

一个简单的解决方案是将按钮分离为自己的相对布局,并将整个事物放在线性布局中,例如:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#551A8B"
    android:textColor="#FFD700">
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#551A8B"
        android:textColor="#FFD700">
        <!-- your buttons -->
    </RelativeLayout>
    <ListView
        android:id="@+id/listView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:textColor="#FFD700"
        android:layout_below="@id/button7"
        android:textSize="10sp">
    </ListView>
</LinearLayout>

答案 2 :(得分:0)

在listView标记中添加android:weigth,并将android:weigth值设置为1.当列表视图的高度和宽度设置为fill_parent并且列表视图覆盖整个布局时,这将起作用。所以尝试一下,它会起作用。

答案 3 :(得分:0)

使用带有两行按钮的垂直LinearLayout(每行作为LinearLayout),然后给ListView一个layout_weight值“1”。实际上,也可以使用layout_weight来清理按钮的大小。

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

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

    <Button android:text="@string/New" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_weight="1" 
    android:id="@+id/button3" />

    <Button android:text="@string/Edit" 
    android:id="@+id/button4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_weight="1"  />

    <Button android:text="@string/Delete" 
    android:id="@+id/button5" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_weight="1"  />
</LinearLayout>

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

    <Button android:layout_height="wrap_content" 
    android:id="@+id/button7" 
    android:layout_width="wrap_content" 
    android:layout_weight="1" 
    android:text="@string/Previousweek" />

    <Button android:layout_height="wrap_content" 
    android:id="@+id/button6" 
    android:layout_width="wrap_content" 
    android:layout_weight="1"
    android:text="@string/Next" />
</LinearLayout>

<ListView android:id="@+id/listView1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_weight="1" 
android:textColor="#FFD700"
android:textSize="10sp" >
</ListView>