Выравнивание TextView в TableRow

Я пытаюсь выровнять 3 текстовых представления в таблице следующим образом:

|------------------------------------------------|
| {TextView1} {TextView2}            {TextView3} |
|------------------------------------------------|

// TextView 1, 2 Left aligned
// TextView 3 Right aligned

Кроме того, строка таблицы должна заполнять ширину таблицы.

С приведенным ниже кодом я могу добиться только этого:

|------------------------------------------------|
| {TextView1} {TextView2} {TextView3}            |
|------------------------------------------------|

Я кодирую:

TableRow tr = new TableRow(myActivity.this);

TextView tvLeft = new TextView(myActivity.this);
tvLeft.setText(values[0]);

TextView tvCenter = new TextView(myActivity.this);
tvCenter.setText(values[1]);

TextView tvRight = new TextView(myActivity.this);
tvRight.setText(values[2]);
tvRight.setGravity(Gravity.RIGHT);

tr.addView(tvLeft);
tr.addView(tvCenter);
tr.addView(tvRight);

myTable.addView(tr);

Правое текстовое представление не смещается вправо, И строка таблицы не заполняет ширину таблицы. Нужно ли использовать веса для текстовых представлений?

Изменить: добавлен TableLayout:

<TableLayout 
android:layout_height="wrap_content"
android:id="@+id/myTable" 
android:layout_width="fill_parent" 
>
</TableLayout>

person Ryan R    schedule 16.06.2011    source источник
comment
Я думаю, что здесь лучше использовать относительную компоновку   -  person Labeeb Panampullan    schedule 16.06.2011
comment
@Labeeb, не могли бы вы уточнить.   -  person Ryan R    schedule 16.06.2011
comment
Я только что попробовал ваш исходный код, и он отлично работает для меня. Как выглядит код вашего фактического TableLayout?   -  person Glendon Trullinger    schedule 16.06.2011


Ответы (2)


Второй выстрел

Я не уверен, создаете ли вы TableLayout программно или в XML, или каковы свойства, но похоже, что вы хотите

(на Яве)

myTable.setColumnStretchable(2, true);

(в формате XML)

android:stretchColumns="2"
person Glendon Trullinger    schedule 16.06.2011
comment
Будет ли размещение TextViews в RelativeLayout внутри TableRow и использование относительного выравнивания лучшим решением? - person Ryan R; 16.06.2011
comment
В данном случае, я не думаю, что это имеет большое значение - как вам удобнее. Если бы вы форматировали LinearLayout вместо TableRow, я бы предложил сделать все это RelativeLayout, чтобы предотвратить ненужное вложение, но в этом случае вы не можете обойти это. - person Glendon Trullinger; 16.06.2011
comment
Использование LinearLayout с параметрами FILL_PARENT приводит к исчезновению правильного TextView. То же самое происходит, если я использую параметры WRAP_CONTENT. - person Ryan R; 16.06.2011
comment
K, СУМАСШЕДШАЯ идея: можно ли заполнить TableLayout RelativeLayouts вместо TableRows? - person Ryan R; 16.06.2011
comment
Вы помещаете TextView внутри LinearLayout? Код, который я разместил выше, должен работать, хотя я его не проверял. - person Glendon Trullinger; 16.06.2011
comment
Здорово! Ваше последнее редактирование сработало. Нет, если кто-то собирается использовать это решение, вы должны установить отступы для TextViews в TableRow, а не для самой TableRow. Если вы добавите левый и/или правый отступ к TableRow, он немного вытолкнет правый TextView за пределы экрана. - person Ryan R; 17.06.2011
comment
В связи с этим, знаете ли вы, как я могу выделить центр TextView так, чтобы, если он слишком длинный, он не выталкивал правильный TextView за пределы экрана? Надеюсь, вам не нужно вручную устанавливать ширину TextView. - person Ryan R; 17.06.2011
comment
Для этого вы захотите сделать почти то же самое, что и в отредактированном ответе, но установите для столбца 1 значение «сжимаемый» (по сути, замените растягиваемый на сжимаемый, а 2 на 1). Оттуда вы можете setMaxLines(1) / setEllipsize(TextUtils.TruncateAt.MIDDLE) / и т. д. и играть с ним, пока он не будет выглядеть так, как вы хотите. - person Glendon Trullinger; 17.06.2011
comment
Я установил столбец 1 (база 0) на сжимаемый и растягиваемый, и, похоже, это то, что я ищу. Однако, похоже, мне нужно еще несколько команд для отображения эллипсов. Спасибо еще раз. - person Ryan R; 17.06.2011

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

    RelativeLayout tr = new RelativeLayout(myActivity.this);

    TextView tvLeft = new TextView(myActivity.this);
    tvLeft.setText(values[0]);

    TextView tvCenter = new TextView(myActivity.this);
    tvCenter.setText(values[1]);

    TextView tvRight = new TextView(myActivity.this);
    tvRight.setText(values[2]);

    tr.addView(tvLeft); 

    RelativeLayout.LayoutParams relativeLayoutParamsCenter = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    relativeLayoutParamsCenter.addRule(RelativeLayout.RIGHT_OF, tvLeft.getId());
    tr.addView(tvCenter,relativeLayoutParamsCenter);

    RelativeLayout.LayoutParams relativeLayoutParamsRight = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);        
    relativeLayoutParamsRight.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);      
    tr.addView(tvRight,relativeLayoutParamsRight);

    myTable.addView(tr);
person Labeeb Panampullan    schedule 16.06.2011
comment
Я планирую добавить многие из этих строк RelativeLayout в свою таблицу. Вам нужно указать для каждой строки, что она ниже последней? - person Ryan R; 17.06.2011