我想实现一个聊天窗口。也就是说,用户在窗口底部书写,新文本向上滚动现有文本。为此,我创建了一个内部带有LinearLayout的ScrollView。根据重力布局,新的EditText视图从底部开始添加到LinearLayout :
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="bottom"
android:layout_gravity="bottom"
android:fillViewport="true"
tools:context=".Chat">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom"
android:layout_gravity="bottom"
android:layout_alignParentBottom="true"/>
</ScrollView>
这很好用,但是当我想查看屏幕上方的“隐藏文本”并将其向上滚动时,我已经在滚动的末尾并且隐藏的文本已经消失了。相反,ScrollView允许我向下滚动,并且新的空白区域已添加到视图的底部。
只是为了测试相反的方向,我改变了行:
android:gravity="bottom"
android:layout_gravity="bottom"
至
android:gravity="top"
android:layout_gravity="top"
对于ScrollView和LinearLayout并添加索引为 0 的新 EditText 视图,而不是末尾的默认值:
linearLayout.addView(editText, 0);
聊天窗口从上到下在相反的方向上运行良好。它可以向下滚动到输入的第一行。什么都没有丢失。
所以我的问题是必须在第一种方法中添加什么才能使滚动保留LinearLayout的内容并且不丢失任何文本?