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));