Как предотвратить выталкивание другого View из экрана - PullRequest
10 голосов
/ 10 октября 2011

это пример XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content" android:orientation="vertical"
        android:layout_margin="5dip" android:background="#FF992222">
        <ScrollView android:layout_height="wrap_content"
            android:layout_width="fill_parent">
            <LinearLayout android:layout_height="wrap_content"
                android:orientation="vertical" android:layout_width="fill_parent">
                <TextView android:layout_width="wrap_content" android:text="TextView"
                    android:layout_height="wrap_content" android:textSize="24dip"></TextView>
            </LinearLayout>
        </ScrollView>
    </LinearLayout>
    <LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content" android:orientation="vertical"
        android:layout_margin="5dip" android:background="#FF555555">
        <TextView android:layout_width="wrap_content" android:text="TextView"
            android:layout_height="wrap_content" android:textSize="24dip"></TextView>
    </LinearLayout>
</LinearLayout>

Результат выглядит следующим образом:

enter image description here

Если вы заметили, текст в верхнем LinerLayout обернут вLinearLayout и ScrollView.

Если верхний контент будет добавлен, он будет выглядеть следующим образом

enter image description here

Нижний Linearlayout будет вытеснен с экрана до того, как ScrollView станетактивным и сделать первый контент прокручиваемым .... И я не хочу, чтобы это произошло ...

Что я должен сделать, чтобы сделать вид прокрутки до того, как нижний вид будет вытолкнут из экрана, какэто:

(это отредактированное изображение, а не созданное редактором Android Layout)

enter image description here

Надеюсь, вопрос достаточно ясен .. Спасибо:)

Ответы [ 3 ]

7 голосов
/ 02 марта 2012

Мне потребовалось безумное количество времени, чтобы понять это, в сети нет информации, но я наконец-то ее получил.Наслаждайтесь!

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:orientation="vertical"
 >

<LinearLayout
    android:id="@+id/LL"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"                
    android:gravity="center_vertical"
    android:layout_centerVertical="true"
    android:orientation="vertical"
    android:weightSum="1" >


    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/TV1"
        android:layout_margin="5dp"
        android:layout_weight="1"
        android:fillViewport="true" >

        <TextView
            android:id="@+id/TV2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center" />
    </ScrollView>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="5dp"
        android:layout_weight="0"
        android:orientation="horizontal" >

        <TextView android:layout_width="wrap_content" android:text="TextView"
        android:layout_height="wrap_content" android:textSize="24dip"></TextView>

    </LinearLayout>
</LinearLayout>

4 голосов
/ 10 октября 2011

Попробуй это.Ключ использует layout_weight внутри линейного макета.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ScrollView android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_width="fill_parent">
        ....
    </ScrollView>
    <TextView android:layout_width="fill_parent" android:text="TextView"
        android:layout_height="wrap_content" android:textSize="24dip"/>
</LinearLayout>
3 голосов
/ 11 октября 2011

Ну, если я правильно понимаю ваш вопрос, вы хотите, чтобы TextView в сером оставался неподвижным, в то время как textViews в красном можно прокручивать, поправьте меня, если я здесь не прав.Если это то, что вы хотите, то вы можете использовать RelativeLayout для достижения этого.Ниже приведен код для создания вывода, например:
http://imageshack.us/photo/my-images/836/device20111011012652.png/
Записи ListView можно прокручивать, пока кнопка (в вашем случае это должно быть TextView) остается на своем месте.

Код:

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

<ListView android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/newtask" android:layout_alignParentTop="true">
</ListView>

<Button android:layout_width="fill_parent" 
android:id="@+id/newtask" 
android:layout_height="wrap_content" 
android:text="Add New Task" android:layout_alignParentBottom="true">
</Button>
</RelativeLayout>  

Просто измените нижнюю кнопку на TextView, и она будет соответствовать тому, что вы хотели.

...