Can't get backspace to work in codemirror, under Phonegap on Android 4.x?

后端 未结 1 337
梦谈多话
梦谈多话 2020-12-09 13:01

I need a web-based text/code editor that behaves well, for my App.

I\'m trying to use codemirror under Phonegap and currently I\'m having problems getting backspace

相关标签:
1条回答
  • 2020-12-09 13:29

    Override init Activity method :

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

    Create on CustomWebView which extends 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;
        }
    
    }
    

    Create your custom 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);
        }
    }
    
    0 讨论(0)
提交回复
热议问题