Размер столбца TableLayout - PullRequest
1 голос
/ 25 июня 2010

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

обязательный символ | этикетка | InputField.

Я хочу, чтобы поле ввода заполняло оставшуюся ширину экрана прямо до метки. Пока единственное решение, которое я нашел, это

<TableLayout android:layout_height="wrap_content"
       android:layout_width="fill_parent" 
       android:stretchColumns="2">
    <TableRow>
                    <TextView android:text="@string/requiredSymbol"
                              />
     <TextView android:text="@string/Name"
                              android:textColor="@color/orange"
                              android:gravity="left|center_vertical"
         />
     <EditText android:id="@+id/contactName"
         android:inputType="text|textPersonName"
                              android:ellipsize="end"
                            android:singleLine="true"
                            android:scrollHorizontally="true"
                            android:maxWidth="1sp"
                            />
    </TableRow>

Для maxWidth должно быть определенное значение, которое фактически игнорируется. Тогда значение stretchColumns делает свое дело хорошо. Обратите внимание, что это также работает, если содержимое EditText в противном случае заставит таблицу выходить за границы экрана (imho ошибка ..).

Теперь это работает хорошо, но мне кажется, что это немного подло. Есть ли лучший способ?

Ответы [ 4 ]

2 голосов
/ 07 февраля 2011

Попробуйте использовать android: layout_weight для столбцов, но убедитесь, что вы установили android: stretchColumns в TableLayout.У меня были проблемы с TableLayout, в одностороннем порядке решив уменьшить столбцы, вызывая нежелательную перенос текста.Я не уверен, связаны ли использование layout_weight и одностороннего сжатия столбца.

0 голосов
/ 31 марта 2012

Я смог заставить EditText соответствовать оставшейся ширине, обернув EditText в FrameLayout и установив EditText в match_parent.Похоже, это работает и для Spinners.

<TableLayout
    android:shrinkColumns="1"
    android:stretchColumns="1" >

    <TableRow>

        <!-- column 0 -->
        <TextView
            android:text="some text" />

        <!-- column 1 -->
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

        </FrameLayout>

    </TableRow>

</TableLayout>
0 голосов
/ 02 августа 2011

Я достиг этого путем получения width поля EditText после его добавления в макет с шириной FILL_PARENT, а затем с его помощью установил MaxWidth.

Выглядит так:

EditText exampleText = new EditText(this);
exampleText.setText([Your Text]);

//This says to fill width, but wrap content for the height
//So it should expand to whatever you've set the MaxLines to be...
LayoutParams exampleLP = new LayoutParams(FILL_PARENT, WRAP_CONTENT);
[Parent].addView(exampleText, exampleLP);

//Here is where it's actually setting the width.
exampleText.setMaxWidth(exampleText.getWidth());

Не мой любимый способ, но он определенно надежен.

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

Похоже, что на данном этапе нет лучшего способа использовать статические XML-файлы. Однако с тех пор я изменил макет, чтобы в нем не было отдельного столбца для требуемой метки / значка, и изменил его, чтобы использовать сообщение EditText # setError в сочетании с реализацией TextWatcher для каждого поля, что в любом случае намного приятнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...