Подтвердить что ты не робот

Ширина экрана Android TableLayout

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

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

Как мне решить эту проблему?

Спасибо

4b9b3361

Ответ 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"
       />