Вопрос по android-widget, android-layout, android – Как настроить макет (высоту и ширину) и контейнеровоз макетов?

1

Я создалTableLayout с двумя рядами, где первый ряд имеет одинTextView а вторая строка имеет два столбца, первый имеетListView а второй имеет одинEditText иButton каждый в разных рядах. Я хочу, чтобы обе строки равной высоты (ровно половина экрана) и оба столбца второй строки должны быть одинаковой ширины (ровно половина экрана). Я хочу построить что-то вроде этого:enter image description here

Как мне поступить? Какой макет мне выбрать?

Ваш Ответ

1   ответ
3

Я не думаю, что ваше текущее решение будет работать (из-за необходимости равного пространства (ширина и высота) +ListView присутствие). Одним из решений является использование вложенныхweights(что отрицательно сказывается на производительности, но (вероятно, не зная, что вы делаете), а не что-то настолько важное, что сломает ваше приложение), как показано на схеме ниже:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <include
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        layout="@layout/identical_layout" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="TextView" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >

        <ListView
            android:id="@+id/list"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1" >
        </ListView>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="vertical" >

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

            <Button
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="ddd" />
        </LinearLayout>
    </LinearLayout>




</LinearLayout>

Еще один вариант, чтобы избежать вложенныхweights проблема заключается в использованииRelativeLayout как показано ниже (я не проверял это):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <include
        android:id="@+id/included_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        layout="@layout/identical_layout" />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/included_layout" >

        <View
            android:id="@+id/anchor"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_centerVertical="true" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_above="@id/anchor"
            android:layout_alignParentTop="true"
            android:background="#99cc00"
            android:text="TextView" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_alignParentBottom="true"
            android:layout_below="@id/anchor" >

            <ListView
                android:id="@+id/list"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1" >
            </ListView>

            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:orientation="vertical" >

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

                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:text="ddd" />
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>

</RelativeLayout>

identical_layout файл макета представляет собой общий макет, общий для вашегоActivities.

Я использую тот же код, который упоминался в вашем ответе .. (вложенные веса) для целей иллюстрации. Я установил некоторые примерные значения String (например, случайные имена моих коллег), все работает отлично (все благодаря вам) ... Однако как только фокус входит в последний LinearLayout, после этого ListView не будет прокручиваться, даже если я нажму на него несколько раз ... Я тестирую его на эмуляторе для API 2.3.3 (10) ... Amit
@anDroider Я не знаю, почему вашListView не прокручивает Есть что-то связанное с вашим кодом, а не с указанными выше файлами макетов, так как я тестировал их прямо сейчас иListView работает как положено ..
Это работает в первый раз, но если однажды фокус достигает EditText, ListView не будет прокручиваться после этого ... Amit
+1000 спасибо Вы действительно великолепны, в настоящее время я пытался добиться этого с помощью TableLayout, однако ваш ответ облегчил мне задачу, я пытаюсь реализовать первый вариант ... и, если это приведет к некоторому снижению производительности, я обязательно пойду на второй подход ... Еще раз спасибо ... Amit
это сработало ... Теперь единственная проблема в том, что ListView не прокручивается. Как я могу это сделать ??? еще раз спасибо миллиард ... Amit

Похожие вопросы