在活动开始时在底部强制滚动视图

时间:2018-11-09 02:12:22

标签: java android layout android-scrollview

我创建了一个聊天室,用户可以在其中讨论多个主题。我正在RelativeLayout内部使用Scrollview,其中包含chatConversation Porblem是当用户打开应用程序时,他必须滚动到底部自己才能聊天或查看新的聊天讨论。

启动活动后,如何强制滚动视图从底部开始。

enter image description here

下面是我的布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:theme="@style/AppTheme.NoActionBar"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <android.support.v7.widget.Toolbar
        android:id="@+id/main_chat"
        app:titleTextAppearance="@style/Toolbar.TitleText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:background="#F0791F"
        android:theme="@style/ThemeOverlay.AppCompat.Light"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navigationIcon="@drawable/ic_people_outline_black_24dp"/>


    <Button
        android:id="@+id/btn_send"
        android:layout_width="42dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:background="@android:color/transparent"
        android:drawableLeft="@drawable/ic_send_black_24dp" />

    <EditText
        android:id="@+id/msg_input"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignTop="@+id/btn_send"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/btn_send"
        android:layout_toStartOf="@+id/btn_send"
        android:background="@null"
        android:hint="Write a message" />

    <ScrollView
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/scrollView"
        android:transcriptMode="alwaysScroll"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_above="@+id/btn_send"
        android:layout_below="@+id/main_chat"
        android:layout_alignRight="@+id/btn_send"
        android:layout_alignEnd="@+id/btn_send">

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="2dp"
            android:layout_marginLeft="4dp"
            android:layout_marginRight="4dp"
            android:layout_marginTop="2dp"
            android:layout_weight="2"
            android:autoLink="all" />
    </ScrollView>
    <View
        android:layout_above="@+id/msg_input"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@android:color/darker_gray"/>
</RelativeLayout>

我已经尝试使用

final ScrollView scrollLayout = ((ScrollView) findViewById(R.id.scrollView));

scrollLayout.post(new Runnable() {
    @Override
    public void run() {
        scrollLayout.fullScroll(ScrollView.FOCUS_DOWN);
    }
});

但是它也不起作用。

请帮助

2 个答案:

答案 0 :(得分:0)

您如何显示消息?有While循环吗?

while循环的最后一行应该是...

    mScrollView.fullScroll(ScrollView.FOCUS_DOWN);

mScrollView或您为ScrollView赋予的任何名称

答案 1 :(得分:0)

我认为您是将邮件附加在一个TextView中(如果我输入错了,请纠正我)。 在您将fullScroll()中的所有文本附加完后,检查您是否正在调用TextView

for (String oneMessage : messageList){
     myTextView.append(oneMessage);
     myTextView.append("\n");
     ....
     ....
}
//Scroll to bottom
scrollLayout.post(new Runnable() {
     @Override
     public void run() {
            boolean success = scrollLayout.fullScroll(ScrollView.FOCUS_DOWN);
            Log.d("Auto Scroll", success ? "Done" : "Failed"); 
     }
});

让我知道这是否解决了您的问题!