Прокрутка страницы при появлении программной клавиатуры - PullRequest
88 голосов
/ 03 апреля 2012

У меня есть <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>

Как вы видите выше, простая раскладка состоит из трех полей ввода и кнопки "ОК".

Я запускаю свое приложение с указанным выше макетом, когда я нажимаю на 1-е поле ввода (@+id/input_one), из нижней части экрана выскакивает программная клавиатура, скрывает 3-й ввод поле и кнопка «ОК».

Так как я использую <ScrollView>, я подумал, что могу прокрутить страницу вверх, чтобы увидеть 3-е поле ввода и кнопку «ОК», которые скрыты программной клавиатурой, но страница не прокручивается . Зачем? Как от этого избавиться? В принципе, я хотел бы видеть все поля ввода и кнопку "ОК", даже если всплывающая программная клавиатура.

Ответы [ 10 ]

114 голосов
/ 03 апреля 2012

Я исправил проблему, определив следующий атрибут в <activity> из AndroidManifest.xml

android:windowSoftInputMode="stateVisible|adjustResize"
36 голосов
/ 26 февраля 2014

Хорошо, я искал несколько часов, чтобы найти проблему, и нашел ее.

Ни одно из изменений типа fillViewport="true" или android:windowSoftInputMode="adjustResize" не помогло мне.

Я использую Android 4.4, и это большая ошибка :

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

Почему-то полноэкранные темы не позволяют прокручивать ScrollViews, когда SoftKeyboard видна.

На данный момент я использовал это вместо:

android:theme="@android:style/Theme.Black.NoTitleBar

Я не знаю, как избавиться от верхней системной панели с помощью дисплея времени и батареи, но, по крайней мере, у меня возникла проблема.

Надеюсь, это поможет тем, у кого такая же проблема.

РЕДАКТИРОВАТЬ: Я получил небольшой обходной путь для моего дела, поэтому я разместил его здесь :

Я не уверен, сработает ли это для вас, но это определенно поможет вам понять и кое-что прояснить.

EDIT2: Здесь - еще одна хорошая тема, которая поможет вам идти в правильном направлении или даже решить вашу проблему.

15 голосов
/ 11 февраля 2016

Для меня единственное, что работает, это положить в действие в манифесте этот атрибут:

android:windowSoftInputMode="stateHidden|adjustPan"

Чтобы не отображать клавиатуру при открытии занятия и не перекрывать нижнюю часть вида.

11 голосов
/ 03 апреля 2012

в вашем Manifest определении windowSoftInputMode свойства <activity android:name=".MyActivity" android:windowSoftInputMode="adjustNothing">

10 голосов
/ 09 мая 2014

поместите это в свой Манифест, как это в Без полноэкранного режима

android:windowSoftInputMode="stateVisible|adjustPan" 

в вашем манифесте

<activity
    android:windowSoftInputMode="stateVisible|adjustPan"
    android:name="com.example.patronusgps.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
7 голосов
/ 29 ноября 2017

Добавьте строку кода ниже в файле манифеста Android под тегом активности

android:windowSoftInputMode="adjustResize"
5 голосов
/ 03 апреля 2012

проверить это.

<activity android:name=".Calculator" android:windowSoftInputMode="stateHidden|adjustResize" android:theme="@android:style/Theme.Black.NoTitleBar"></activity>
2 голосов
/ 25 июля 2017

Это сработало только у меня:

android:windowSoftInputMode="adjustPan"
0 голосов
/ 03 июня 2019

Также, если вы хотите сделать это программно, просто добавьте следующую строку в onCreate упражнения.

getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | 
            WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE );
0 голосов

Вы можете попробовать использовать следующий код для решения вашей проблемы:

 <activity
     android:name=".DonateNow"
     android:label="@string/title_activity_donate_now"
     android:screenOrientation="portrait"
     android:theme="@style/AppTheme"
     android:windowSoftInputMode="stateVisible|adjustPan">
 </activity>
...