Принудительно ScrollView внизу в начале деятельности - PullRequest
0 голосов
/ 09 ноября 2018

Я создал чат, где пользователь может обсуждать несколько тем. Я использую Scrollview внутри RelativeLayout, который содержит chatConversation Проблема в том, что когда пользователь открывает приложение, он должен прокрутить до самого Низа, чтобы пообщаться или посмотреть новое обсуждение чата.

Как заставить запуск прокрутки начинаться снизу, когда начинается действие ..

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 голосов
/ 01 января 2019

Я думаю, вы добавляете сообщения одним 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"); 
     }
});

Дайте мне знать, если это решило вашу проблему!

0 голосов
/ 01 января 2019

Как вы отображаете сообщения? С циклом в то время как?

Последняя строка цикла while должна быть ...

    mScrollView.fullScroll(ScrollView.FOCUS_DOWN);

mScrollView или любое другое имя, которое вы дали ScrollView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...