在Android 4.x的Phonegap下,无法使用backspace在codemirror中工作?

我需要一个基于Web的文本/代码编辑器,对我的应用程序来说,performance很好。

我试图在Phonegap下使用codemirror,目前我遇到的问题是退格键为以前input的文本工作。 这对我的用例来说是一个巨大的问题。 现在我已经看了一下,它似乎不是一个直接的codemirror问题,而是android和虚拟键盘malarkey,看到这个问题: Android:Backspace在WebView / BaseInputConnection

我使用Phonegap版本2.6.0,最新的codemirror版本(截至昨天晚上)和testing在Android 4.2.2。 这似乎是特定于Android上的WebView,任何人都可以validation这不是在iOS上的问题?

我并不反对使用一些Java代码来纠正这个问题,但是我不确定如何“挂钩”到Cordov的WebView实现中,因为所有暴露给我的代码都是这样构成的:

package com.mycompany.MyAppName; import android.os.Bundle; import org.apache.cordova.*; public class MyAppName extends DroidGap{ @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); // Set by <content src="index.html" /> in config.xml super.loadUrl(Config.getStartUrl()); //super.loadUrl("file:///android_asset/www/index.html") } } 

除非我应该看看Cordovas的源代码树。 基本上我想知道的是如何在上面的链接中实现解决scheme在我的情况。 任何帮助是极大的赞赏!

Solutions Collecting From Web of "在Android 4.x的Phonegap下,无法使用backspace在codemirror中工作?"

覆盖init Activity方法:

 public class ProjectName extends DroidGap { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); init(); // Don't forget this, you'll get runtime error otherwise! // The following does the trick: super.appView.getSettings().setUseWideViewPort(true); super.appView.getSettings().setLoadWithOverviewMode(true); // Set by <content src="index.html" /> in config.xml super.loadUrl(Config.getStartUrl()); //super.loadUrl("file:///android_asset/www/index.html") super.setIntegerProperty("loadUrlTimeoutValue", 10000); } /** * Create and initialize web container with default web view objects. */ @Override public void init() { CordovaWebView webView = new CustomWebView(ProjectName.this); CordovaWebViewClient webViewClient; if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { webViewClient = new CordovaWebViewClient(this, webView); } else { webViewClient = new IceCreamCordovaWebViewClient(this, webView); } this.init(webView, webViewClient, new CordovaChromeClient(this, webView)); } } 

在扩展CordovaWebView的CustomWebView上创build

 public class CustomWebView extends CordovaWebView{ public CustomWebView(Context context) { super(context); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { MyCustomInputConnection connection = new MyCustomInputConnection(this, false); return connection; } } 

创build您的自定义InputConnection:

 public class MyCustomInputConnection extends BaseInputConnection{ public MyCustomInputConnection(View targetView, boolean fullEditor) { super(targetView, fullEditor); } @Override public boolean deleteSurroundingText(int beforeLength, int afterLength) { // magic: in latest Android, deleteSurroundingText(1, 0) will be called for backspace if (beforeLength == 1 && afterLength == 0) { // backspace return super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)) && super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL)); } return super.deleteSurroundingText(beforeLength, afterLength); } }