У меня есть <ScrollView>
макет:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_scrollview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<EditText
android:id="@+id/input_one"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:inputType="number" >
<EditText
android:id="@+id/input_two"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:inputType="number" >
<EditText
android:id="@+id/input_three"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:inputType="number" >
<Button
android:id="@+id/ok_btn"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="@string/ok_str" />
</LinearLayout>
</ScrollView>
Как вы видите выше, простой макет состоит из трех полей ввода и кнопки «ОК».
Я запускаю свое приложение с указанным выше макетом, когда я нажимаю на первое поле ввода ( @+id/input_one
), в нижней части экрана появляется мягкая клавиатура, она скрывает третье поле ввода и кнопку «ОК».
Поскольку я использую <ScrollView>
, я подумал, что могу прокрутить страницу вверх, чтобы увидеть 3-е поле ввода и кнопку «ОК», которые скрыты программной клавиатурой, но страница не прокручивается . Зачем? Как от этого избавиться? в основном, я хотел бы видеть все поля ввода и кнопку «ОК», даже мягкую клавиатуру.
Ответы:
Я исправил эту проблему, определив следующий атрибут
<activity>
из AndroidManifest.xmlисточник
Хорошо, я искал несколько часов, чтобы найти проблему, и нашел ее.
Ни одно из изменений мне не понравилось
fillViewport="true"
и неandroid:windowSoftInputMode="adjustResize"
помогло.Я использую Android 4.4, и это большая ошибка :
Каким-то образом полноэкранные темы предотвращают прокрутку ScrollViews, когда отображается SoftKeyboard.
На данный момент я вместо этого использовал это:
Я не знаю, как избавиться от верхней системной панели с отображением времени и батареи, но, по крайней мере, у меня есть проблема.
Надеюсь, это поможет другим, у кого такая же проблема.
РЕДАКТИРОВАТЬ: У меня есть небольшое обходное решение для моего случая, поэтому я разместил его здесь :
Я не уверен, что это сработает для вас, но это определенно поможет вам понять и прояснить некоторые вещи.
EDIT2: вот еще одна хорошая тема, которая поможет вам пойти в правильном направлении или даже решить вашу проблему.
источник
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
Для меня единственное, что работает, - это действие в манифесте этого атрибута:
Чтобы не отображать клавиатуру при открытии действия и не перекрывать нижнюю часть представления.
источник
поместите это в свой манифест вот так, в полноэкранном режиме
в вашем манифесте
источник
ScrollView
, а a,RelativeLayout
которое содержит a,LinearLayout
которое затем содержит aScrollView
В вашем
Manifest
определенииwindowSoftInputMode
свойства:источник
проверьте это.
источник
Это сработало только для меня:
источник
Также, если вы хотите сделать это программно, просто добавьте следующую строку в onCreate действия.
источник
Вы можете попробовать использовать следующий код для решения вашей проблемы:
источник
Ну, самый простой ответ, который я пробовал, - просто удалить ваш код, который заставляет действие переходить в полноэкранный режим. У меня был такой код, который отвечал за то, чтобы моя деятельность переходила в полноэкранный режим:
if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT) {
Я только что удалил свой код, и он работает полностью нормально, хотя, если вы хотите добиться этого в полноэкранном режиме, вам придется попробовать другие методы
источник