2013-05-11 11 views
8

私のアプリケーションでうまく動作するWebベースのテキスト/コードエディタが必要です。Android 4.xのPhonegapで、codemirrorで動作するようにバックスペースを取得できませんか?

私はPhonegapの下でcodemirrorを使用しようとしていますが、現在、以前に入力したテキストを扱うためにbackspaceを取得する際に問題があります。これは私のユースケースにとって大きな問題です。今私は周りを見て、それは直接のcodemirrorの問題ではないようだが、むしろアンドロイドと仮想キーボードmalarkey、この質問を参照してください:Android: Backspace in WebView/BaseInputConnection

私はPhonegapバージョン2.6.0、最新のcodemerrorバージョンを使用しています(昨晩)アンドロイド4.2.2でテストしました。これはAndroid上のWebViewに固有のようですが、誰でもiOS上の問題ではないことを確認できますか?

私は問題を修正するためにいくつかのJavaコードを実行を嫌うないんだけど、私にさらされます、すべてのコードがで構成されていて、私は、どのように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のソースツリーを調べていない限り、本質的に私が知りたいのは、私の場合、上記のリンクでソリューションを実装する方法です。どんな助けでも大歓迎です!

+0

はい、これは特定のある問題ではありませんCodeMirrorはAceでも発生します。また、ハードウェアキーボードを使用すると効果的です。仮想オンスクリーンキーボードの問題です。 – Fred

答えて

9

オーバーライドのinit活動方法:

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)); 
    } 

} 

CustomWebViewに作成し、カスタムInputConnectionを作成CordovaWebView

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; 
    } 

} 

を拡張:

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); 
    } 
} 
+1

それは動作します!どうもありがとうございます! 2つのカスタム設定が「次のトリックはありますか?」というコメントの下にあるものについて質問できますか?スケールが異なっているかのようにページがすべて「最小化」されたので、私はそれらを無効にしなければなりませんでした。 – Nisk

+0

私はremenber、私もそれらを無効になります:p – max28

+0

あなたは私の一日を作った!ありがとうございました! – 0m4r

関連する問題