2013-05-11 11 views
8

Uygulamam için iyi davranan web tabanlı bir metin/kod düzenleyicisine ihtiyacım var.Android 4.x'te Phonegap altında, kodemirror'da çalışmak için geri alan yok mu?

Phonegap adı altında kodemirror kullanmaya çalışıyorum ve şu anda daha önce girilmiş metinler için çalışma alanına geri dönme konusunda sorun yaşıyorum. Bu benim kullanım durumum için büyük bir sorundur. Şimdi etrafa bir göz attım ve doğrudan bir kodemirror problemi değil, android ve sanal klavye malarkey gibi görünüyor, şu soruya bakın: Android: Backspace in WebView/BaseInputConnection

Phonegap version 2.6.0 sürümünü kullanıyorum, en son codemirror sürümü (dün gece itibariyle) ve Android 4.2.2'de test ediliyor. Bu, Android'deki WebView'a özgü gibi görünüyor, herkes iOS'ta bir sorun olmadığını doğrulayabilir mi?

Sorunu düzeltmek için bazı Java kodunu yapmaya isteksiz değilim, ama bana maruz kaldığı tüm kod oluşuyor olarak nasıl WebView'da ait Cordova'nın uygulamaya 'kanca', emin değilim:

Cordovas kaynak ağacına bakmam gerekmedikçe
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") 
    } 
} 

. Esasen bilmek istediğim, benim çözümümdeki bu bağlantıdaki çözümü nasıl uygulayabileceğim. Herhangi bir yardım büyük beğeni topluyor!

+0

Evet, bu özgü bir sorun değildir CodeMirror ile aynı zamanda Ace ile oluşur. Bir donanım klavyesi kullanırken de harika çalışıyor. Sanal ekran klavyesiyle ilgili bir sorun. – Fred

cevap

9

geçersiz kıl init Etkinlik yöntemi:

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 Oluştur özel InputConnection oluşturun 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; 
    } 

} 

uzanır:

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

Çalışıyor! çok teşekkür ederim! İki özel ayarın ne olduğunu sorabilir miyim, "Aşağıdaki hile" yorumu altında mı? Onları devre dışı bırakmak zorunda kaldım, çünkü sayfa “küçültülmüş” hale getirdi, çünkü ölçek farklıydı. – Nisk

+0

Ben hadım etme, onları devre dışı bırakacağım: p – max28

+0

Günümü yaptın! Bir milyar teşekkürler! – 0m4r

İlgili konular