popup软键盘时滚动页面

我有一个<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> 

如上所示,简单的布局由三个input字段和一个“确定”button组成。

我用上面的布局运行我的应用程序,当我点击第一个input字段( @+id/input_one ),软键盘将从屏幕底部popup,它隐藏第三个input字段和“确定”button。

由于我使用了<ScrollView> ,我以为可以向上滚动页面以查看软键盘隐藏的第三个input字段和“确定”button, 但页面不可滚动 。 为什么? 如何摆脱它? 基本上,我想看到每个input字段和“确定”button,即使软键盘popup。

我通过在AndroidManifest.xml的 <activity>中定义了以下属性来解决了我的问题

 android:windowSoftInputMode="stateVisible|adjustResize" 

好吧,我已经search了几个小时来find问题,我find了。

没有像fillViewport="true"android:windowSoftInputMode="adjustResize"帮助了我。

我使用Android 4.4,这是一个很大的错误

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

不知何故,当SoftKeyboard可见时,全屏主题会阻止ScrollViews的滚动。

目前,我最终使用这个:

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

我不知道如何摆脱时间和电池显示的顶级系统吧,但至less我得到了这个问题。

希望这有助于其他有相同问题的人。

编辑:我有我的情况一个小的解决方法,所以我把它贴在这里 :

我不确定这是否适合你,但它肯定会帮助你理解,并清除一些事情。

编辑2: 这是另一个好主题,将帮助你走向正确的方向,甚至解决你的问题。

在你的Manifest定义windowSoftInputMode属性<activity android:name=".MyActivity" android:windowSoftInputMode="adjustNothing">

在没有全屏模式下把它放在你的Manifest中

 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> 

对我来说唯一有用的东西就是放在清单这个属性的活动中:

 android:windowSoftInputMode="stateHidden|adjustPan" 

打开活动时不显示键盘,不要与视图底部重叠。

看看这个。

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

这只对我有用:

 android:windowSoftInputMode="adjustPan" 

其工作:

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