键盘遮挡输入文本区域

Posted

技术标签:

【中文标题】键盘遮挡输入文本区域【英文标题】:Keyboard obscures input text area 【发布时间】:2016-09-01 09:22:19 【问题描述】:

我有一个显示在http://ionicframework.com/docs/api/service/$ionicPopup/ 中的表单。问题是当光标放在最终输入(文本区域)内时,键盘会显示,但输入不会滚动回视图并被键盘遮挡。用户必须向下滚动。

我使用的是安卓设备。

documentation 说

Ionic 将尝试通过滚动进入视图来防止键盘遮挡输入和可聚焦元素。为了使其工作,任何可聚焦的元素都必须在滚动视图或指令中,例如具有滚动视图的内容。

如果我用 ion-content 标签包装表单,输入框会滚动回视图,但会弄乱我的布局,我正在寻找另一个解决方案。

更新: 清单的样子

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="myAwesomeApp" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">
    <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
        <intent-filter android:label="@string/launcher_name">
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="me.apla.cordova.AppPreferencesActivity" />
    <activity android:clearTaskOnLaunch="true" android:configChanges="orientation|keyboardHidden" android:exported="false" android:name="com.google.zxing.client.android.CaptureActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden">
        <intent-filter>
            <action android:name="com.google.zxing.client.android.SCAN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity android:label="@string/share_name" android:name="com.google.zxing.client.android.encode.EncodeActivity">
        <intent-filter>
            <action android:name="com.phonegap.plugins.barcodescanner.ENCODE" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity android:label="@string/share_name" android:name="com.google.zxing.client.android.HelpActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" android:required="false" />

【问题讨论】:

【参考方案1】:

将此添加到您在 AndroidMenifest 中的 Activity 中

 android:configChanges="keyboardHidden|orientation|screenSize"

【讨论】:

【参考方案2】:

如果您使用的是科尔多瓦键盘,您可以在弹出窗口打开时使用cordova.plugins.Keyboard.disableScroll(false);,在弹出窗口关闭时使用cordova.plugins.Keyboard.disableScroll(true);。 这样布局可以在使用弹出窗口的情况下处理重叠的键盘。

【讨论】:

我没有使用cordova键盘【参考方案3】:

您必须将清单中的android:windowSoftInputMode="adjustResize" 设置为ApplicationActivity

并检查您是否在 Activity 中设置了类似 getWindow().setSoftInputMode(...) 的内容。如果是这样,请删除这些行。

【讨论】:

请看一下我的问题中的清单。该设置已经存在。 是的。我看了一下,它只设置在一个活动中,而不是在应用程序中。我怎么知道出现键盘问题的 Activity。 那么我应该添加设置每个活动标签吗?该文件是生成的,不是手动放在一起的。我认为科尔多瓦为我们生成了这个文件。 Ionic 或 Cordova 中是否有某种钩子可以设置此设置?

以上是关于键盘遮挡输入文本区域的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Mobile Safari 中使用 Javascript 在输入或文本区域上调用键盘?

Android键盘遮挡webview中的textarea [重复]

用于增加或减少文本区域值的数字键盘按钮

Sencha Touch android 键盘隐藏文本区域

触摸文本区域时 UISearchDisplayController 不显示键盘

使用虚拟文本区域启用/禁用 Android 虚拟键盘