Android: автоматическая прокрутка вниз EditTextView для приложений чата

Спасибо за просмотр, я создаю приложение чата. Это работает по большей части. Единственное, с чем у меня проблема - это прокрутка. Я использую EditText, чтобы опубликовать новое сообщение с сервера.

по методу

msg = msg + "\n" + newMsg
EditText.setText(msg)

Мне нужно сделать новый текст под старым текстом видимым, как только он появится.

Поэтому я думаю, что лучший способ - это автоматическая прокрутка вниз, как только представление обновится.

Есть ли простой способ сделать это? как в макете может быть?

Еще раз спасибо!

код для макета

<?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"
>
<Button
android:id="@+id/sendButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="send"
/>
    <EditText
android:id="@+id/msgBox"
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:layout_alignParentBottom="true" 
android:layout_toLeftOf="@+id/sendButton"
android:gravity="left"
android:longClickable="false"
/>
<EditText  
android:id="@+id/chatBox"
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:editable="false"
android:layout_above="@+id/msgBox"
android:scrollbars="vertical" 
android:gravity="left|top" 
android:isScrollContainer="true" 
android:cursorVisible="false" 
android:longClickable="false" 
android:clickable="false"
android:autoLink="all"
/>
</RelativeLayout>

3 ответа

Решение

Решение состоит в том, чтобы отправить отдельное сообщение пользовательского интерфейса по почте. Это определенно сработает. После того, как вы установите текст / добавите текст в TextView внутри ScrollView, обновите ScrollView с помощью метода post(Runnable), как показано ниже:

messageView.append(blabla);      
scroller.post(new Runnable() { 
                public void run() { 
                    scroller.smoothScrollTo(0, messageView.getBottom());
                } 
            }); 

Я думаю, что лучший способ сделать это - использовать TextView с прокруткой, а не EditText, потому что, как только пользователь печатает сообщение, он не может его редактировать. Попробуйте что-то вроде этого, это прекрасный способ напечатать сообщение

<ScrollView android:id="@+id/scroller"
        android:layout_width="fill_parent" android:layout_height="fill_parent"

        android:background="#FFFFFF">
        <TextView android:id="@+id/messageView"
            android:layout_height="fill_parent" android:layout_width="fill_parent"
            android:paddingBottom="8dip" android:background="#ffffff"
            android:textColor="#000000" />
    </ScrollView>

И для автоматической прокрутки вниз вызовите этот метод после нажатия на сообщение для просмотра

private void scrollDown() {
        scroller.smoothScrollTo(0, messageView.getBottom());  
}

Здесь скроллер ScrollView и MessageView это TextView

Вы также можете распечатать сообщение с другим цветом, используя HTML, как

messageView.append(Html.fromHtml("<font color='green'><b>("+date+") "+ username +":</b></font><br/>"+ message+"<br/>", null, null));

Попробуйте этот метод: программная прокрутка EditText

Другие вопросы по тегам