开发者

Relative Layout is causing issues with formatting

开发者 https://www.devze.com 2023-03-18 20:29 出处:网络
I have been working on an app for my school recently and wanted to clean it up a bit before possibly publishing it. On the scheduling portion of the app, I have 5 buttons that perform actions on a Lis

I have been working on an app for my school recently and wanted to clean it up a bit before possibly publishing it. On the scheduling portion of the app, I have 5 buttons that perform actions on a ListView that is also on the screen at the same time. However, I have the issue when I have around 6 or more events on the screen as once the list view takes over the screen and pushes the buttons off the screen, making it so that I cannot delete the events, make new ones, and so on.

I tried setting the list view to a static size (400px) which worked for normal screen orientation, but if the phone is set to landscape view you cannot see the buttons either. With my current code it would appear to work in the XML viewer but in practice is not the case.

This is the code without the static size setting:

<?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>

The XML viewer for this code is:

Relative Layout is causing issues with formatting

Which would lead me to believe it woul开发者_Python百科d work fine. I tested it on my emulator and got the following result after entering a bunch of silly events however:

Relative Layout is causing issues with formatting

This result is consistent with multiple versions of the emulator.

How I can fix this problem without using static size constraints that cause landscape orientation issues?


Separate the buttons into a separate RelativeLayout and enclose this and the ListView in a vertical LinearLayout.

Then:

<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

The key point here is the height and weight on the ListView. This means that it fills the remaining space in the LinearLayout after space has been correctly allocated for the buttons.


Add a android:weigth in your listView tag and set the android:weigth value to 1. This will work when your list view height and width is set to fill_parent and your list view is covering entire layout. So try it, it will work.


One simple solution would be to separate the buttons in their own relative layout and put the whole thing in a linear layout, eg:

<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>


Use a vertical LinearLayout with two rows of Buttons (each row as a LinearLayout), then give the ListView a layout_weight value of "1". In fact, use layout_weight to clean up the size of your buttons too.

<?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> 

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号