Относительные проблемы, вызывающие компоновку с форматированием - PullRequest
0 голосов
/ 08 июля 2011

Я недавно работал над приложением для своей школы и хотел немного его почистить, прежде чем публиковать.В части планирования приложения у меня есть 5 кнопок, которые выполняют действия с ListView, который также находится на экране одновременно.Однако у меня возникает проблема, когда на экране отображается около 6 или более событий, когда список переходит на экран и отталкивает кнопки от экрана, так что я не могу удалить события, создать новые и т. Д.,

Я попытался установить представление списка в статический размер (400 пикселей), который работал для нормальной ориентации экрана, но если телефон настроен на альбомную ориентацию, вы также не можете видеть кнопки.С моим текущим кодом он может работать в средстве просмотра 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 ]

1 голос
/ 09 июля 2011

Разделите кнопки на отдельные 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 после того, как пространство было правильно выделено для кнопок.

0 голосов
/ 09 июля 2011

Используйте вертикальный 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> 

0 голосов
/ 09 июля 2011

Добавьте android: weigth в свой тег listView и установите значение android: weigth равным 1. Это будет работать, когда для высоты и ширины представления списка установлено значение fill_parent, а представление списка охватывает весь макет. Так что попробуйте, это сработает.

0 голосов
/ 08 июля 2011

Одним простым решением было бы разделить кнопки в их собственном относительном расположении и поместить все это в линейное расположение, например:

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