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>