Android Studio – Scrollview перемещается за пределы экрана на открытой клавиатуре

Android
Вопрос: Я хочу создать экран чата, который имеет EditText и кнопку внизу (завернутый в LinearLayout), и ScrollView для сообщений вверху. Проблема в том, что когда пользователь нажимает EditText, и клавиатура открывается, ScrollView выйдет из экрана в результате перемещения вверх. Я хотел бы переместить макет (с помощью EditBox и Button) над клавиатурой, а ScrollView - для

Вопрос:

Я хочу создать экран чата, который имеет EditText и кнопку внизу (завернутый в LinearLayout), и ScrollView для сообщений вверху. Проблема в том, что когда пользователь нажимает EditText, и клавиатура открывается, ScrollView выйдет из экрана в результате перемещения вверх. Я хотел бы переместить макет (с помощью EditBox и Button) над клавиатурой, а ScrollView – для изменения размера экрана. Проблема показана на рисунках ниже:

enter image description here

Как вы можете видеть, линия, которая пишет “Чат” (левое изображение), исчезла в правильном изображении.

Я использую этот код XML:

<?xml version=»1.0″ encoding=»utf-8″?> <LinearLayout xmlns:android=»http://schemas.android.com/apk/res/android» xmlns:app=»http://schemas.android.com/apk/res-auto» xmlns:tools=»http://schemas.android.com/tools» android:layout_width=»match_parent» android:layout_height=»match_parent» android:padding=»15sp» android:orientation=»vertical» android:background=»#ccdcf7″ tools:context=»com.orionz.sockettest.ChatActivity»> <ScrollView android:id=»@+id/scroll» android:layout_width=»match_parent» android:layout_height=»wrap_content» android:layout_weight=»15″ android:isScrollContainer=»false»> <LinearLayout android:layout_width=»match_parent» android:layout_height=»wrap_content» android:orientation=»vertical»> <TextView android:id=»@+id/chatBox» android:layout_width=»match_parent» android:layout_height=»wrap_content» android:padding=»5dp» android:text=»Chatn» android:textColor=»#000000″ android:textIsSelectable=»true» android:textSize=»22dp» /> </LinearLayout> </ScrollView> <LinearLayout android:layout_width=»match_parent» android:layout_height=»wrap_content» android:layout_weight=»1″ android:gravity=»center|bottom» android:orientation=»horizontal»> <EditText android:id=»@+id/msgInput» android:layout_width=»wrap_content» android:layout_height=»wrap_content» android:layout_weight=»0.8″ android:ems=»10″ android:hint=»Message…» android:inputType=»text» /> <Button android:id=»@+id/sendButton» android:layout_width=»wrap_content» android:layout_height=»wrap_content» android:layout_weight=»0.2″ android:background=»@drawable/mybutton» android:padding=»5sp» android:text=»Send» android:textColor=»#ffffff» android:textSize=»20sp» /> </LinearLayout> </LinearLayout>

Я видел много ответов, таких как установка android:windowSoftInputMode но никто не работал. Я использую Android Studio. Любая помощь будет оценена по достоинству.

Лучший ответ:

Наконец, я обнаружил, что было не так в моем случае.

  • Тема была полноэкранной. В стиле деятельности у меня была эта строка, которая вызвала проблему:

<item name=»android:windowFullscreen»>true</item>

  • В java-коде я дал команду открыть клавиатуру в начале действия:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

который также был частью проблемы

  • После добавления свойства adjustResize к активности в манифесте все работало нормально:

android:windowSoftInputMode=»adjustResize»

Ответ №1

Попробуйте заменить ScrollView на ListView следующим образом:

<ListView android:id=»@+id/list_view» android:layout_width=»wrap_content» android:layout_height=»0dp» android:layout_weight=»1″> </ListView>

сохраните все сообщения в ArrayList и установите адаптер в ListView, который вы создали:

ListView listView=(ListView) findViewById(R.id.list_view); ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,ArrayList); listView.setAdapter(adapter);

Наконец, добавьте слушателя на вашу кнопку, пишущую эти строки:

EditText editText= (EditText) findViewById(R.id.msgInput); ArrayList.add(editText.getText().toString()); adapter.notifyDataSetChanged(); Ответ №2

Wrap Scrollview на весь макет.

т.е. поместите editText и кнопку внутри Scrollview и установите scrollView Height для android:layout_height=»match_parent»

Оцените статью
Добавить комментарий