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> Отправить <?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> Отправить <?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> 

Решение состоит в том, чтобы отправить отдельное сообщение пользовательского интерфейса через сообщение. Это определенно сработает. После того, как вы установите текст TextText / append в 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()); } 

Здесь scroller – ScrollView, а messageView – TextView

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

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

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