Ширина Для Android TableLayout

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

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

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

спасибо

6 ответов


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

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


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

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

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

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

<TableLayout
    android:id="@+id/my_table_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="1"
    android:shrinkColumns="0" >
</TableLayout>

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

tableLayout.setColumnShrinkable(1,true);

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

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


попробуйте это, убедитесь, что 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>

У меня была аналогичная проблема с 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"
       />