Как заставить Android View сжимать детей

Я пытаюсь написать карточную игру для Android, и у меня возникают проблемы с макетом. Я кодирую основной экран игры, который состоит из пяти карт, расположенных вертикально слева и справа, и пяти карт, расположенных горизонтально сверху и снизу. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно, чтобы все карты сжимались по горизонтали и вертикали, если нет места для отображения всех других карт.

Ниже приведено изображение проблемы (я опускаю карточки слева и внизу для ясности). Как видите, справа показаны только четыре карты — нижняя карта частично закрыта. В представлении просто не хватило места, поэтому остальная часть карты, которая не подходит, отбрасывается.

Вот ссылка на скриншот, так как я не могу размещать изображения: image

В этой ситуации я бы хотел, чтобы Android уменьшил высоту всех верхних карт и правых карт, пока нижняя карта не будет полностью видна. Это не кажется сложным, но я не могу заставить его работать. Я создал изображение ниже, используя RelativeLayout и расположив все верхние карты рядом друг с другом, а все правые карты — друг под другом (с верхней картой справа под верхними картами). Я попытался добавить все карты в их собственное представление, но это тоже не сработало.

Какие-либо предложения? Спасибо!


Хорошо, я приблизил его (см. ссылку на изображение внизу), но теперь у меня обратная проблема - мне нужно его увеличить. Думаю, это потому, что я уменьшил изображения, которые использую для костюмов. Как видите, все они уменьшены до небольшого размера. Я хотел бы получить LinearLayout для каждой кнопки, настроенной на расширение по горизонтали/вертикали, чтобы использовать все свободное пространство, не рисуя последние кнопки с видимой части LinearLayout. В идеале я мог бы вставить изображение любого размера для костюма и изменить его размер соответствующим образом, но я боюсь, что прошу какой-то циклической логики или чего-то еще в механизме компоновки.

Вот мой XML-файл. Класс HandView содержит пять карт в каждом наборе. 5 карт имеют поле в 5 пикселей между собой.

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:shrinkColumns="*"
    android:background="#FF00FF00">

    <TableRow
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:background="#FF0000FF">
        <com.herscher.euchre.ui.HandView
          android:background="#FFFF0000"
            android:layout_column="1"
            android:orientation="horizontal"
            android:id="@+id/northHandView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal" />
    </TableRow>

    <TableRow
        android:layout_height="wrap_content"
        android:layout_width="wrap_content">
        <com.herscher.euchre.ui.HandView
            android:layout_column="0"
            android:orientation="vertical"
            android:id="@+id/westHandView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <com.herscher.euchre.ui.PlayArea
            android:layout_column="1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/playArea" />

        <com.herscher.euchre.ui.HandView
            android:layout_column="2"
            android:orientation="vertical"
            android:id="@+id/eastHandView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </TableRow>

    <TableRow
        android:layout_height="wrap_content"
        android:layout_width="wrap_content">
        <com.herscher.euchre.ui.HandView
            android:layout_column="1"
            android:orientation="horizontal"
            android:id="@+id/southHandView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </TableRow>

</TableLayout>

Новое изображение здесь

У кого-нибудь есть предложения?


person Mark Herscher    schedule 06.01.2011    source источник


Ответы (1)


Вы можете посмотреть на использование веса LinearLayout функция, которая заставит дочерние представления соответствовать доступному пространству. В вашем случае вы, вероятно, захотите, чтобы все они были одинакового веса.

person jakebasile    schedule 06.01.2011