Android TableLayout Width - PullRequest
       24

Android TableLayout Width

32 голосов
/ 30 октября 2010

У меня есть два столбца TableLayout как единственный дочерний элемент представления прокрутки. Первый столбец содержит TextViews («метки»), а второй столбец содержит EditText / Spinner / DateWidget и т. Д. («Значения»). Даже если я указал android:layout_width="fill_parent" для TableLayout, TableRow и всех виджетов (в столбце «значения»).

Экран выглядит идеально при создании деятельности. Однако, когда в EditText вводится действительно длинное значение, столбец «значения» выходит за пределы видимой области экрана.

Как мне справиться с этим?

Ответы [ 6 ]

58 голосов
/ 30 октября 2010

Вы можете определить размеры столбцов с помощью веса. Таким образом, вы определите высоту макета таблицы для заполнения родительского элемента, но для каждого столбца необходимо установить ширину «0px» и вес в процентах, которые вы хотите, чтобы столбец охватывал. Поэтому, предполагая, что вы хотите, чтобы первый столбец составлял 30% ширины экрана, вы устанавливаете его вес равным «0,3», а второй столбец - «0,7».

Попробуйте и посмотрите, работает ли это.

22 голосов
/ 13 ноября 2013

Прагматичный способ решить эту проблему - использовать атрибуты stretchColumns и shrinkColumns в TableLayout.Их значения должны быть основаны на 0 индексах столбцов.

Например, если у вас есть два столбца макета таблицы и:

  • Вы хотите, чтобы второй столбец заполнился пустымпробел (растянуть), чтобы TableLayout соответствовал всему родительскому представлению на устройстве с большим экраном
  • Вы бы хотели, чтобы первый столбец был сокращен (и его содержимое возможно обернуто / эллиптически) на устройстве с небольшим экраном

вы бы определили свой TableLayout как:

<TableLayout
    android:id="@+id/my_table_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="1"
    android:shrinkColumns="0" >
</TableLayout>
7 голосов
/ 29 декабря 2011

Это сработало для меня ..

tableLayout.setColumnShrinkable(1,true);
5 голосов
/ 28 марта 2012
<TableLayout 
android:layout_height="fill_parent" 
android:layout_width="fill_parent"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp">
<TableRow 
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TextView 
android:layout_width="wrap_content"
android:text="Name " 
android:layout_height="fill_parent">
</TextView>
<EditText 
android:layout_width="0dp"
android:layout_weight="1"
android:hint="name"
android:layout_height="wrap_content" 
>
</EditText>
</TableRow>
</TableLayout>

Этот код работал для меня, чтобы выровнять текстовое представление по первому столбцу и отредактировать родительский текст для заполнения.

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

У меня была похожая проблема с EditText на Android 2.2. В моем случае добавление свойства android: maxWidth = "0sp" помогло. Теперь поле EditText отображается так, как я хотел - поэтому оно все равно того же размера, что и другие поля EditText, но дополнительно оно не изменяется при вводе длинного текста.

Вот мое определение EditText:

<EditText android:id="@+id/extra_edit"
       android:padding="3dip"
       android:inputType="textImeMultiLine"
       android:maxWidth="0sp"
       android:layout_width="fill_parent"
       />
0 голосов
/ 30 октября 2010

Попробуйте, убедитесь, что android:singleLine="false" и android:inputType="textMultiLine":

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:stretchColumns="1">
    <TableRow android:layout_height="wrap_content"
        android:layout_width="fill_parent">

        <TextView android:text="Label:" />
        <EditText android:id="@+id/entry" android:inputType="textMultiLine"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:singleLine="false" />
    </TableRow>
</TableLayout>
...