Как гарантировать пространство для ImageView, не допустить его сжатия? - PullRequest
3 голосов
/ 05 ноября 2010

Мне нужно создать XML со следующим содержимым:
* Два TextView с изменяющимся текстом (1-3 строки), один TextView под другим.
* Один ImageView справа от 2 TextView, по центру по вертикали, 30x30 пикселей.

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

Я пробовал много разных макетов, но TextView продолжает отталкивать TextViews, когда текст длинный. Когда текст «наполовину длинный», изображение становится крошечным, но все еще видимым. Я хочу, чтобы он всегда был размером 30х30 пикселей, текст можно переносить и использовать вместо него другую строку.

Я пытался указать значения для ширины и minWidth. Также пробовал layout_weight = "1" для ImageView. Также попытался обернуть ImageView в LinearLayout и дать этому параметру layout_weight = "1". Ничего не работает.

Вот пример того, что не работает:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content">

    <LinearLayout android:layout_width="wrap_content"
       android:layout_height="wrap_content" android:orientation="vertical">

       <TextView android:id="@+id/popupTitle" android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>

       <TextView android:id="@+id/popupContent"
      android:layout_width="wrap_content" android:layout_height="wrap_content"/>
    </LinearLayout>

    <ImageView android:layout_width="wrap_content"
       android:layout_height="wrap_content" android:src="@drawable/img_30x30_px" />
 </LinearLayout>

Ответы [ 2 ]

3 голосов
/ 05 ноября 2010

У меня была похожая проблема, и я обнаружил, что макет TableView работает для меня. Это заняло некоторое время, но вы можете поэкспериментировать со свойствами столбцов растягивания и сжатия, чтобы изменить поведение расширения столбцов в соответствии с содержимым.

Обратите внимание, что вы должны иметь возможность установить linearLayout вашего текста в fill_parent (чтобы заполнить пространство столбца).

Прочтите, как работает TableRow http://developer.android.com/resources/tutorials/views/hello-tablelayout.html

<TableRow>
    <!-- Column 1 -->
    <LinearLayout android:layout_width="fill_parent"
   android:layout_height="wrap_content" android:orientation="vertical">

            <TextView
                android:layout_column="1"
                android:text="Open..."
                android:padding="3dip" />
            <TextView
                android:text="Ctrl-O"
                android:gravity="right"
                android:padding="3dip" />
    </LinearLayout>
    <!-- Column 2 -->
    <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:src="@drawable/img_30x30_px" />
</TableRow>

(Боюсь, я не на машине с Android, поэтому я не смог протестировать приведенный выше код).

0 голосов
/ 05 ноября 2010

Большое спасибо, Эмиль! Оно работает! Вы сделали мои выходные! :)

Я должен был попробовать это сразу (хотя сегодня вечер пятницы), и вот как теперь выглядит мой xml:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:shrinkColumns="0">  

<TableRow>
<!-- Column 1 -->
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="vertical">

  <TextView android:id="@+id/popupTitle"
  android:layout_width="wrap_content" android:layout_height="wrap_content"/>

  <TextView android:id="@+id/popupContent"
  android:layout_width="wrap_content" android:layout_height="wrap_content" />
  </LinearLayout>

  <!-- Column 2 -->
  <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content"
  android:layout_gravity="center_vertical" android:src="@drawable/img_30x30_px" />

</TableRow>
</TableLayout>
...