Изменение размера Android Linear/RelativeLayout с помощью ImageViews

Застрял на этом в течение нескольких дней, все просто не работает с тем, как я это настраиваю. У меня есть большая сетка ImageViews одинакового размера. Он состоит из Horizontal LinearLayout и внутри него 5 вертикальных LinearLayouts (первое изображение).

То, что я хочу (и мне все равно, как, будь то с помощью RelativeLayout, Linear или Tables), - это если бы я установил, скажем, изображение № 2 на более крупное изображение (в частности, 3x3 из меньших). Я хочу, чтобы оно эффективно «перезаписывало ' эти изображения (как показано на рисунке 2).

Я попытался сделать это, установив для «перезаписанных» изображений (3,4,7,8,9,12,13,14) значение setVisibility (GONE), которое отлично работает, но затем второй вертикальный LinearLayout расширился, чтобы соответствовать размеру нового образа, который мне не нужен. Если я попытаюсь установить его на fill_parent, хотя это сжимает размер изображения. В итоге у меня получается третья картинка.

Весь связанный код XML (идентификационные коды совпадают с кодами на изображении):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"> 
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs01"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs06"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs11"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs16"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
</LinearLayout>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs02"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs07"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs12"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs17"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
</LinearLayout>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs03"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs08"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs13"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs18"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs04"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs09"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs14"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs19"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs05"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs10"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs15"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs20"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
</LinearLayout>

</LinearLayout>

Если бы я сделал это с помощью RelativeLayouts, я столкнулся бы с проблемами, когда я установилVisibility(GONE), поскольку на позицию вполне можно ссылаться с помощью отсутствующего представления. Установка его в INVISIBLE просто оставляет пустое пространство, когда я действительно хочу, чтобы он имел размер 0px на 0px.

Любая помощь вообще будет оценена по достоинству; кажется, независимо от того, что я пытаюсь сделать, что-то всегда идет не так, и это сводит меня с ума.

альтернативный текст


person Dororo    schedule 30.08.2010    source источник


Ответы (2)


Хм, я вернусь к этому, когда вернусь домой и попробую кое-что, но я бы рекомендовал попробовать TableLayout с 5 строками, 5 столбцами. Вы должны иметь возможность установить диапазон строк и столбцов в коде (чтобы представление занимало более одной ячейки). Вот это я бы попробовал в первую очередь.

Этот пост выглядит полезным.

person Kevin Coppock    schedule 30.08.2010
comment
Спасибо за помощь. Проблема, которую я обнаружил с TableLayout, заключается в том, что, хотя вы можете сделать COLSPAN, вы не можете сделать ROWSPAN, поэтому в примере, который я привел изначально, изображение № 1 будет растянуто (если fill_parent) или будет пустое место, где № 6 и № 11 (если wrap_content). - person Dororo; 30.08.2010
comment
Ах хорошо. Тогда это хороший вопрос. Я еще никогда не использовал GridView, но похоже, что это может быть возможным решением. (Жаль, что у меня здесь не было Eclipse...) - person Kevin Coppock; 30.08.2010
comment
Моя единственная проблема с GridView заключается в том, что я не думаю, что он позволит макет, который я хочу, так как он будет обрезать/изменить размер изображений, чтобы убедиться, что он создает сетку, так как я не думаю, что это позволит изображению охватывать несколько «квадратов сетки». Я изучаю использование базового TableLayout, который содержит изображения-заполнители, а затем использует RelativeLayout для привязки больших изображений к любой ячейке, которую я хочу, но у меня возникают проблемы с указанием, например, android:toLeftOf='@ID/some_id' в коде, а не XML. Любая помощь? - person Dororo; 30.08.2010

Наконец-то заработало, используя RelativeLayout и якоря. Привязки устанавливаются размером с квадрат сетки 1x1, затем у вас есть другой набор представлений изображений AlignLeft и AlignTop в желаемой позиции, например:

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relay"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"> 

    <ImageView android:id="@+id/a_t1"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
        />
    <ImageView android:id="@+id/a_t2"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t1"
        />
    <ImageView android:id="@+id/a_t3"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t2"
        />
    <ImageView android:id="@+id/a_t4"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t3"
        />
    <ImageView android:id="@+id/a_t5"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t4"
        />


        <ImageView android:id="@+id/a_t6"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_below="@id/a_t1"
        />
    <ImageView android:id="@+id/a_t7"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t6"
android:layout_below="@id/a_t2"
        />
    <ImageView android:id="@+id/a_t8"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t7"
android:layout_below="@id/a_t3"
        />
    <ImageView android:id="@+id/a_t9"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t8"
android:layout_below="@id/a_t4"
        />
    <ImageView android:id="@+id/a_t10"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t9"
android:layout_below="@id/a_t5"
        />



        <ImageView android:id="@+id/a_t11"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_below="@id/a_t6"
        />
    <ImageView android:id="@+id/a_t12"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t11"
android:layout_below="@id/a_t7"
        />
    <ImageView android:id="@+id/a_t13"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t12"
android:layout_below="@id/a_t8"
        />
    <ImageView android:id="@+id/a_t14"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t13"
android:layout_below="@id/a_t9"
        />
    <ImageView android:id="@+id/a_t15"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t14"
android:layout_below="@id/a_t10"
        />



<ImageView android:id="@+id/a_t16"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_below="@id/a_t11"
        />
    <ImageView android:id="@+id/a_t17"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t16"
android:layout_below="@id/a_t12"
        />
    <ImageView android:id="@+id/a_t18"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t17"
android:layout_below="@id/a_t13"
        />
    <ImageView android:id="@+id/a_t19"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t18"
android:layout_below="@id/a_t14"
        />
    <ImageView android:id="@+id/a_t20"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t19"
android:layout_below="@id/a_t15"
        />

    <ImageView android:id="@+id/gs01"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_alignLeft="@id/a_t1"
android:layout_alignTop="@id/a_t1"
        />

</RelativeLayout>

Поэтому, если вы хотите поместить что-то в #2, как в моем примере, измените layout_alignLeft и layout_alignTop для id gs01 на @id/a_t2, и это сработает. Это решает проблему с установкой setVisibility(GONE), которая удаляет точку «привязки», используемую для вычисления положения пространств сетки.

Теперь это было сложно. знак равно

person Dororo    schedule 30.08.2010