Android Измените ширину строки ListView, чтобы она соответствовала ширине экрана на очень широких экранах

У меня есть ListView с настраиваемой компоновкой строк, каждая из которых состоит из 6 TextView виджетов по горизонтали.
Каждая строка шире, чем экраны большинства телефонов, даже в ландшафтном режиме.
Но на некоторых планшетах высокого класса ширина строки короче. чем ширина экрана в альбомной ориентации.

Как определить, что экран шире строки ListView, а затем изменить ширину последнего виджета TextView, чтобы он соответствовал ширине экрана?

Я не хочу делать строки шире по умолчанию, потому что они будут слишком широкими для обычных устройств.
Я попытался проверить ширину в ListView адаптер getView(), но там все ширины равны 0, даже ширина convertView, событие после инфляции макета.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView 
        android:id="@+id/log_time"
        android:layout_width="135dp"
        android:layout_height="wrap_content"
        android:padding="3dp"
        android:textSize="14sp" >
    </TextView>

    <TextView 
        android:id="@+id/log_level"
        android:layout_width="20dp"
        android:layout_height="wrap_content"
        android:padding="3dp"
        android:textSize="14sp" >
    </TextView>

    <TextView 
        android:id="@+id/log_pid"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:padding="3dp"
        android:textSize="14sp" >
    </TextView>

    <TextView 
        android:id="@+id/log_tid"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:padding="3dp"
        android:textSize="14sp" >
    </TextView>

    <TextView 
        android:id="@+id/log_tag"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:padding="3dp"
        android:maxLines="1"
        android:singleLine="true"
        android:ellipsize="end"
        android:textSize="14sp" >
    </TextView>

    <TextView 
        android:id="@+id/log_message"
        android:layout_width="600dp"
        android:layout_height="wrap_content"
        android:padding="3dp"
        android:maxLines="1"
        android:singleLine="true"
        android:ellipsize="end"
        android:textSize="14sp" >
    </TextView>

</LinearLayout>

person ilomambo    schedule 01.03.2013    source источник
comment
опубликуйте свой xml для строки   -  person Pragnani    schedule 01.03.2013


Ответы (1)


Вы можете инкапсулировать все ваши TextViews в RelativeLayout, а затем использовать атрибуты выравнивания RelativeLayout, чтобы последний элемент заполнил оставшееся пространство экрана.

Например:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@+id/textView1" />

</RelativeLayout>

Второй TextView устанавливается для выравнивания справа от первого и для выравнивания по правому краю его родителя. Таким образом, он заполнит любое пространство между первым TextView и концом RelativeLayout.

person Bryan Herbst    schedule 01.03.2013
comment
Разве это не выровняет последний элемент, чтобы заполнить оставшееся пространство на ВСЕХ устройствах? Мне нужно заполнить оставшееся пространство только на очень широких экранах, на всех остальных экранах я хочу сохранить ширину, которую я установил в XML (кстати, последний TextView имеет ширину 600dp, я хочу сохранить ее, если только на очень широкий экран) - person ilomambo; 01.03.2013
comment
В этом случае вы можете поместить этот XML в целевую папку макета. Возможно, что-то вроде layout-sw600dp/whatever.xml поможет. Чтобы выбрать соответствующую папку макета. - person Bryan Herbst; 01.03.2013