5

PhoneGapアプリケーションがありますが、正常に動作しています。私を悩ませているのは、PhoneGapがソフトキーボードを処理する方法だけです。入力がぼやけても非表示になりません。これはiOSで実行されますが、Androidで新しいページをロードするときにも保持されます。

私はこれを見ました: http ://wiki.phonegap.com/w/page/27915465/How%20to%20show%20and%20hide%20soft%20keyboard%20in%20Android

そしてこれ: https ://github.com/phonegap/phonegap-plugins/tree/master/Android/SoftKeyboard

しかし、両方とも私にはうまくいきませんでした、何かアイデアはありますか?

よろしく、エリック

4

3 に答える 3

7

あなたがリンクしたプラグインは私のために働きました(まったく同じ問題がありました):

$("#eingabe").blur(); //for ios
var softkeyboard = window.cordova.plugins.SoftKeyBoard;
softkeyboard.hide();

あなたはおそらく Cordova 2.0.0 (またはそれ以降) を使用しており、プラグイン ファイル (Phonegap < 2.0 用に記述されています) を変更していません。

更新されたファイルは次のとおりです(私が使用するもの):

ソフトキーボード.js

cordova.plugins = cordova.plugins || {};

cordova.plugins.SoftKeyBoard = {
show: function (win, fail) {
    return cordova.exec(
        function (args) { if (win !== undefined) { win(args); } },
        function (args) { if (fail !== undefined) { fail(args); } },
        'SoftKeyBoard', 'show', []
    );
},

hide: function (win, fail) {
    return cordova.exec(
        function (args) { if (win !== undefined) { win(args); } },
        function (args) { if (fail !== undefined) { fail(args); } },
        'SoftKeyBoard', 'hide', []
    );
},

isShowing: function (win, fail) {
    return cordova.exec(
        function (args) { if (win !== undefined) { win(args); } },
        function (args) { if (fail !== undefined) { fail(args); } },
        'SoftKeyBoard', 'isShowing', []
    );
}
};

SoftKeyBoard.java

package org.apache.cordova.plugins;

import org.json.JSONArray;
import android.content.Context;
import android.view.inputmethod.InputMethodManager;
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;

public class SoftKeyBoard extends Plugin {
public SoftKeyBoard () { }

public void showKeyBoard () {
    InputMethodManager mgr = (InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.showSoftInput(webView, InputMethodManager.SHOW_IMPLICIT);
    ((InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(webView, 0);
}

public void hideKeyBoard() {
    InputMethodManager mgr = (InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.hideSoftInputFromWindow(webView.getWindowToken(), 0);
}

public boolean isKeyBoardShowing() {
    // if more than 100 pixels, its probably a keyboard...
    int heightDiff = webView.getRootView().getHeight() - webView.getHeight();
    return (100 < heightDiff);
}

public PluginResult execute(String action, JSONArray args, String callbackId) {
    if (action.equals("show")) {
        this.showKeyBoard();
        return new PluginResult(PluginResult.Status.OK, "done");
    } else if (action.equals("hide")) {
        this.hideKeyBoard();
        return new PluginResult(PluginResult.Status.OK);
    } else if (action.equals("isShowing")) {
        return new PluginResult(PluginResult.Status.OK, this.isKeyBoardShowing());
    } else {
        return new PluginResult(PluginResult.Status.INVALID_ACTION);
    }
}
}

config.xml を変更する

また、「 res/xml/config.xml」に次の行を必ず追加してください。

<plugin name="SoftKeyBoard" value="org.apache.cordova.plugins.SoftKeyBoard" />
于 2012-12-03T21:23:51.737 に答える
3

これは私にとってはうまくいき、過度の引っかき傷から頭を救いました! (プラグインも必要ありません)

var hideKeyboard = function() {
    document.activeElement.blur();
    $("input").blur();
};

解決策はここにあり、非解決策を見つけることができますjQuery

于 2015-01-12T19:30:39.283 に答える
0

キーボードの状態に関係なく、Java は以下を呼び出すことに注意してください。

return new PluginResult(PluginResult.Status.OK, this.isKeyBoardShowing());

ここでの 2 番目のパラメーターには、true または false が含まれます。したがって、JavaScript コールバックは次のようになります。

cordova.plugins.SoftKeyBoard.isShowing(function (showing) {
    if (showing) {
        console.error("############ keyboard is open");
    } else {
        console.error("############ keyboard is closed");
    }
}
,function () {
    // never called
    console.error("############ never called!");
});

この場合、両方の可能な結果で成功コールバックのみが呼び出されますが、Cordova は成功と失敗の両方の JavaScript コールバックを期待しているようです。

于 2014-02-06T18:18:29.123 に答える