2013-11-15 2 views
0

Мне нужно получить TableLayout, чтобы он соответствовал ширине его родительского LinearLayout, но я не могу заставить его работать.TableLayout не будет соответствовать_parent LinearLayout width

На первом снимке экрана снимок «Короткая заголовок» является первым видом в вертикальном LinearLayout. «Поля» ниже являются членами TableLayout, который является вторым видом в вертикальном LinearLayout.

Если текст «Заголовок» не требует такой ширины, как TableLayout, все выравнивается по назначению.

Когда «Заголовок» требует большей ширины, чем TableLayout, TableLayout не соответствует ширине с «Заголовком», как вы можете видеть на втором снимке экрана.

Как я могу заставить TableLayout соответствовать ширине LinearLayout?

Примечание: Основание LinearLayout нужно «обернуть» к наималейшей ширине, необходимой для отображения его содержимого, таким образом устанавливая фиксированную ширину не является решение

Short Header

Long Header

Формат XML для этого теста:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/mainLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <LinearLayout 
     android:id="@+id/baseLinerLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="#FFAAAAAA" > 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:padding="10dp" 
      android:background="#FF000000" 
      android:textColor="#FFFFFFFF" 
      android:text="Long header to make base layout wider than table layout" /> 

      <TableLayout 
      android:id="@+id/tableLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#33FFFFFF" > 

      <TableRow 
       android:id="@+id/tableRow1" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 

       <TextView 
        android:gravity="center" 
        android:padding="10dp" 
        android:background="#44FFFFFF" 
        android:textColor="#FF000000" 
        android:text="Field (0,0)" /> 

       <TextView 
        android:gravity="center" 
        android:padding="10dp" 
        android:background="#88FFFFFF" 
        android:textColor="#FF000000" 
        android:text="Field (0,1)" /> 

      </TableRow> 

      <TableRow 
       android:id="@+id/tableRow2" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 

       <TextView 
        android:gravity="center" 
        android:padding="10dp" 
        android:background="#88FFFFFF" 
        android:textColor="#FF000000" 
        android:text="Field (0,1)" /> 

      </TableRow> 
     </TableLayout> 
    </LinearLayout> 
</RelativeLayout> 

ответ

4
<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <TextView 
      android:layout_weight="1 --- this worked for me" 
      android:gravity="center" 
      android:padding="10dp" 
      android:background="#44FFFFFF" 
      android:textColor="#FF000000" 
      android:text="Field (0,0)" /> 
    <TextView 
      android:layout_weight="1" 
      android:gravity="center" 
      android:padding="10dp" 
      android:background="#88FFFFFF" 
      android:textColor="#FF000000" 
      android:text="Field (0,1)" /> 

</TableRow> 
+0

Это сработало, так это то, что вы продвигаете? – ismail

+2

Спасибо. Я попробовал установить 'android: stretchColumns =" ​​1 "', чтобы второй столбец растянулся и заполнил пустую ширину таблицы, но это заставило таблицу заполнить ширину экрана. Ваше предложение установить вес второго представления в каждой строке до 1 достигает того, что я думал, что 'stretchColumns' предназначалось для чтения документов API. Он предполагает, что атрибут 'stretchColumns' может быть немного сломан, да? –

+0

несколько раз некоторые атрибуты, которые должны работать, но не работают. Я думаю, что это связано с каким-то родительским стилем или худшим из-за версий – ismail

1

Как вы используете TextView s без установленной ширины, я бы предложил установить параметр android:layout_width из всех ваших полей на match_parent.

Редактировать: Зачем вам нужен второй LinearLayout? Это кажется бесполезным, потому что он только обертывает TableLayout.

+0

Спасибо за ваше предложение. К сожалению, я уже играл с установкой ширины макетов полей в 'match_parent' или' wrap_content', но это не повлияло. В документации API говорится, что * «Дети TableLayout не могут указать атрибут layout_width. Ширина всегда MATCH_PARENT." *, Поэтому я удалил эти строки, поскольку они игнорируются. –

+0

Вы правы. Дополнительный LinearLayout не нужен. XML был упрощен с целью тестирования этой проблемы из плавающего диалога, который добавляет другие представления ко второму LinearLayout. Теперь я отредактировал код в вопросе, чтобы избавиться от него. Спасибо –

1

вам нужно, чтобы получить ширину базовой LinearLayout в Java программно-файла ...

How to get width ? Check here

после этого и можно установить ширину макета таблицы с одинаковой шириной

TableLayout layout = (TableLayout)findViewById(R.id.tableLayout); 
    // Gets the layout params that will allow you to resize the layout 

LayoutParams params = layout.getLayoutParams(); 

// Changes the height and width to the specified *pixels* 

params.width = x; 

layout.setlayoutparams(params); 

x - ширина, которую вы получаете от линейной компоновки

Смежные вопросы