我正在使用Cordova 5.4.0,我在我的config.xml:
<preference name="fullscreen" value="false" />
<preference name="android-windowSoftInputMode" value="adjustPan" />
Run Code Online (Sandbox Code Playgroud)
但在建成之后,我AndroidManifest.xml仍然存在
android:windowSoftInputMode="adjustResize"
Run Code Online (Sandbox Code Playgroud)
为什么不起作用?我该如何解决?
Phi*_*ker 34
的android-windowSoftInputMode偏好似乎是被支持的PhoneGap只,而不是科尔多瓦.
解决方法1(Cordova 6.4+):使用edit-config
确保元素中xmlns:android="http://schemas.android.com/apk/res/android"包含namespace属性widget并添加edit-config元素:
<widget xmlns:android="http://schemas.android.com/apk/res/android" ...>
...
<edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:name='MainActivity']" mode="merge">
<activity android:windowSoftInputMode="adjustPan" />
</edit-config>
...
</widget>
Run Code Online (Sandbox Code Playgroud)
解决方法2(在Cordova 6.4之前):使用插件
cordova plugin add cordova-custom-config
Run Code Online (Sandbox Code Playgroud)
添加以下首选项:
<platform name="android">
<preference name="android-manifest/application/activity/@android:windowSoftInputMode" value="adjustPan" />
...
</platform>
Run Code Online (Sandbox Code Playgroud)
解决方法3:添加before_build挂钩
将以下挂钩添加到config.xml:
<hook type="before_build" src="scripts/appBeforeBuild.js" />
Run Code Online (Sandbox Code Playgroud)
使用以下内容将文件appBeforeBuild.js添加到scripts目录:
#!/usr/bin/env node
var fs = require('fs');
var path = require('path');
var pathToManifest = path.join(__dirname, '../platforms/android', 'AndroidManifest.xml');
if(fs.existsSync(pathToManifest)) {
var config = fs.readFileSync(pathToManifest, 'utf8');
var result = config.replace(/(android:windowSoftInputMode=").*?(")/, '$1adjustPan$2');
fs.writeFileSync(pathToManifest, result, 'utf8');
console.log('Set android:windowSoftInputMode to adjustPan');
}
else {
console.log('Could not find AndroidManifest to set android:windowSoftInputMode');
}
Run Code Online (Sandbox Code Playgroud)
此脚本将使用Node查找AndroidManifest并对android:windowSoftInputMode属性执行正则表达式替换(仅首次出现).
我找到了一个简单的解决方案,使用edit-config自v6.4.0以来内置于cordova 的标签.我config.xml现在看起来像这样,键盘不再调整视口大小!
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.example.hello" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>HelloWorld</name>
<!-- ... -->
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application/activity[@android:name='MainActivity']">
<activity android:name="MainActivity" android:windowSoftInputMode="adjustPan" />
</edit-config>
<!-- ... -->
</widget>
Run Code Online (Sandbox Code Playgroud)
提示:在试验这项工作时,我对我做了一些意外的改动AndroidManifest.xml.您可以轻松地重置此功能,将android平台移除并重新添加到您的cordova项目中,如下所示:cordova platform rm android && cordova platform add android.
| 归档时间: |
|
| 查看次数: |
10714 次 |
| 最近记录: |