Ширина экрана Android TableLayout
У меня есть два столбца TableLayout как единственный дочерний элемент прокрутки. Первый столбец содержит TextViews ( "метки" ), а второй столбец содержит EditText/Spinner/DateWidget и т.д. ( "Значения" ). Несмотря на то, что я указал андроид: layout_width = "fill_parent" для TableLayout, TableRow и всех виджетов (в столбце "values" ).
Экран выглядит идеально, когда создается действие. Однако, когда в EditText вы вводите очень длинное значение, столбец "values" выходит за пределы видимой области экрана.
Как мне решить эту проблему?
Спасибо
Ответы
Ответ 1
Вы можете определить размеры столбцов с помощью веса. Таким образом, вы определяете высоту макета таблицы, чтобы заполнить родительский элемент, но для каждого столбца вы должны установить ширину "0px" и вес в процентах, которые вы хотите, чтобы столбец был включен. Итак, предположим, что вы хотите, чтобы первый столбец составлял 30% ширины экрана, вы установили его вес на "0,3", а во втором столбце на "0,7".
Попробуйте и посмотрите, работает ли это.
Ответ 2
Прагматичным способом решения этой проблемы является использование атрибутов 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>
Ответ 3
Это сработало для меня..
tableLayout.setColumnShrinkable(1,true);
Ответ 4
<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>
Этот код работал у меня, чтобы выровнять текстовое представление в первом столбце и отредактировать родительский текст.
Ответ 5
Попробуйте это, убедитесь, что 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>
Ответ 6
У меня была аналогичная проблема с 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"
/>