2013-08-07 5 views
10

पर संतोषजनक div में छवि को हटा नहीं सकता है मैं एंड्रॉइड में एक समृद्ध टेक्स्ट एडिटर बना रहा हूं। ऐसा करने के लिए, मैं का उपयोग contentEditable div.एंड्रॉइड

शैलियों को जोड़ने के लिए, मैं JavaScript का आह्वान करता हूं। यह सब ठीक काम करता है, सिवाय इसके कि जब मैं एक छवि या क्षैतिज नियम डालने के लिए जावास्क्रिप्ट को आमंत्रित करता हूं। जब मैं इन चीजों को सम्मिलित करने के लिए जावास्क्रिप्ट का उपयोग करता हूं, तो यदि मैं छवि या क्षैतिज नियम को हटाने के लिए बैक बटन दबाए रखने का प्रयास करता हूं, तो यह काम नहीं करता है।

विचित्र रूप से पर्याप्त है, अगर मैं पहले कोई अन्य चरित्र दर्ज करता हूं, और फिर छवि या क्षैतिज नियम डालें, तो मैं छवि/क्षैतिज नियम को ठीक से हटा सकता हूं, लेकिन छवि/क्षैतिज नियम से पहले दर्ज किए गए वर्ण को हटा नहीं सकता।

मैंने प्रत्येक राज्य में एचटीएमएल को प्रिंट करने, चयन/रेंज आदि की जांच करने की कोशिश की है, और ऐसा कुछ भी नहीं लगता है जो राज्य के बारे में अलग है जो समझा सकता है कि मैं छवि को क्यों हटा नहीं सकता, आदि

+0

क्या आप हमें कुछ इनपुट प्रदान करने का प्रयास कर सकते हैं कि आपने HTML + जावास्क्रिप्ट और एंड्रॉइड जावा कोड दोनों को कोड किया है (मैं WebChromeClient अनुमान लगा रहा हूं)? – Tomap

+0

आप बहुत सटीक होने के लिए पर्याप्त जानकारी प्रदान नहीं कर रहे हैं, मुझे लगता है कि आपके पास दृश्यों के पीछे HTML है क्योंकि आपके बैकस्पेस वास्तव में टैग के अंतिम भाग को हटा देता है (जो इसे प्रदर्शित करने के लिए enoguh है) और आपके कारण आइटम से पहले दृश्यमान रूप से क्या हटाया जा सकता है इसे हटा नहीं सकता है कि बैकस्पेस के आगे प्रेस टैग के अधिक से अधिक हटाते हैं। ई ..


प्रदर्शित होता है, फिर बैकस्पेस और आपके पास

+0

कुछ जेएस कोड दिखाएं, कुछ नमूना div सामग्री दिखाएं (http://stackoverflow.com/questions/how-to-ask) आपको एक ईवेंट श्रोता को div में लागू करना और जोड़ना चाहिए जो जानता है कि एक पूर्ण HTML तत्व को कैसे हटाया जाए, उदाहरण के लिए बैकस्पेस या हटाते समय दबाएं। – stackunderflow

उत्तर

0

मैंने WebView और JavaScript का उपयोग करके एक richTextEditor लागू किया है।

मुझे छवि को डालने/हटाने में कोई समस्या नहीं है जिसे मैंने सामग्री संपादन योग्य HTML पृष्ठ में जोड़ा है। कोड जो मैंने छवि डालने के लिए उपयोग किया है

String exeSucess = "document.execCommand('insertHtml', false,'<img src=\"" 
     + selectedImagePath + "\" height=auto width=200 ></img>');"; 
    //Then code for executing this javascript. 

धन्यवाद।

+0

क्या आपको कर्सर के साथ छवि को हटाने में कोई समस्या नहीं है? मेरे पास ऐसा करने में सभी प्रकार की समस्याएं हैं। मैंने deleteSurroundingText विधि को ओवरराइड करने का प्रयास किया, जो स्टैक ओवरफ्लो पर कई अन्य धागे सुझाते हैं, लेकिन वास्तव में कोई भाग्य नहीं था। जब इसे ओवरराइड करते हुए, यह सभी स्वत: पूर्ण राज्य को बर्बाद कर देता है, तो यादृच्छिक वर्णों को अक्सर डालें या हटा देगा - जाहिर है एक बड़ी समस्या। – user2658889

+0

मैं ऊपर जावास्क्रिप्ट को निष्पादित करके छवि को सम्मिलित करने में सक्षम था और सॉफ़्टकेबोर्ड में बैकप्रेस बटन दबाकर इसे हटाने में भी सक्षम था। नेक्सस पर काम करना, एचटीसी एक वी लेकिन बहुत कम अंत उपकरणों में इसमें कुछ फंसे मुद्दे हैं। – DroidBot

1

Android: Backspace in WebView/BaseInputConnection

उपवर्ग वेब-दृश्य और के रूप में इस आदमी के सवाल के द्वारा दिखाया विधि ओवरराइड।

कुछ फोनों पर, केवल लड़के का प्रश्न आवश्यकताओं को पूरा करेगा। लिंक का जवाब दूसरे फोन के साथ संगतता के लिए कोड को पूरा करेगा। हालांकि, आप एक इनपुट कनेक्शन कनेक्शन को उप-वर्गीकृत करते हैं। इनपुट कनेक्शन नहीं। और फिर उस कस्टमर को अपने कस्टम वेबव्यू में वापस कर दें।

बस एक एफवाईआई, इस लिंक में स्थिति का एक और अधिक विस्तृत स्पष्टीकरण है, हालांकि मैंने अपने विचारों को जल्दी से कार्यान्वित करने की कोशिश की और यह काम नहीं किया। शायद मेरे उद्देश्यों के लिए बहुत जटिल है। मैंने ऊपर वर्णित किए गए समाधान के बजाय उनके समाधान की कोशिश की है क्योंकि मैंने ऊपर उल्लिखित समाधान को ध्वनि-से-पाठ फ़ंक्शन सही ढंग से काम नहीं करने का कारण बनता है। Android - cannot capture backspace/delete press in soft. keyboard

-1
<div contenteditable="true"></div> 

मैं इस का उपयोग वेब दृश्य

में एक समृद्ध संपादक करने के लिए फिर वेब-दृश्य में विधि TapInputConnection ओवरराइड

@Override 
public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 
    return new TapInputConnection(super.onCreateInputConnection(outAttrs)); 
} 



class TapInputConnection implements InputConnection { 

    private InputConnection mConnection; 


    public TapInputConnection(InputConnection conn){ 
     this.mConnection = conn; 
    } 

    @Override 
    public CharSequence getTextBeforeCursor(int n, int flags) { 
     return mConnection.getTextBeforeCursor(n, flags); 
    } 

    @Override 
    public CharSequence getTextAfterCursor(int n, int flags) { 
     return mConnection.getTextAfterCursor(n, flags); 
    } 

    @Override 
    public CharSequence getSelectedText(int flags) { 
     return mConnection.getSelectedText(flags); 
    } 

    @Override 
    public int getCursorCapsMode(int reqModes) { 
     return mConnection.getCursorCapsMode(reqModes); 
    } 

    @Override 
    public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) { 
     return mConnection.getExtractedText(request, flags); 
    } 

    @Override 
    public boolean deleteSurroundingText(int beforeLength, int afterLength) { 
     return mConnection.deleteSurroundingText(beforeLength, afterLength); 
    } 

    @Override 
    public boolean setComposingText(CharSequence text, int newCursorPosition) { 
     return mConnection.setComposingText(text, newCursorPosition); 
    } 

    @Override 
    public boolean setComposingRegion(int start, int end) { 
     return mConnection.setComposingRegion(start, end); 
    } 

    @Override 
    public boolean finishComposingText() { 
     return mConnection.finishComposingText(); 
    } 

    @Override 
    public boolean commitText(CharSequence text, int newCursorPosition) { 
     return mConnection.commitText(text, newCursorPosition); 
    } 

    @Override 
    public boolean commitCompletion(CompletionInfo text) { 
     return mConnection.commitCompletion(text); 
    } 

    @Override 
    public boolean commitCorrection(CorrectionInfo correctionInfo) { 
     return mConnection.commitCorrection(correctionInfo); 
    } 

    @Override 
    public boolean setSelection(int start, int end) { 
     return mConnection.setSelection(start, end); 
    } 

    @Override 
    public boolean performEditorAction(int editorAction) { 
     return mConnection.performEditorAction(editorAction); 
    } 

    @Override 
    public boolean performContextMenuAction(int id) { 
     return mConnection.performContextMenuAction(id); 
    } 

    @Override 
    public boolean beginBatchEdit() { 
     return mConnection.beginBatchEdit(); 
    } 

    @Override 
    public boolean endBatchEdit() { 
     return mConnection.endBatchEdit(); 
    } 

    @Override 
    public boolean sendKeyEvent(KeyEvent event) { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_DEL) { 
      if (event.getAction() == KeyEvent.ACTION_UP) { 
       delete(); 
      } 
      return true; 
     } 
     return mConnection.sendKeyEvent(event); 
    } 

    @Override 
    public boolean clearMetaKeyStates(int states) { 
     return false; 
    } 

    @Override 
    public boolean reportFullscreenMode(boolean enabled) { 
     return mConnection.reportFullscreenMode(enabled); 
    } 

    @Override 
    public boolean performPrivateCommand(String action, Bundle data) { 
     return mConnection.performPrivateCommand(action, data); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    @Override 
    public boolean requestCursorUpdates(int cursorUpdateMode) { 
     return mConnection.requestCursorUpdates(cursorUpdateMode); 
    } 
} 

आप एहसास हो गया है कि मैं sendKeyEvent ओवरराइड और मैं Delete कुंजी के साथ सौदा मेरे द्वारा

यहहैसमारोह;

public void delete(){ 
    loadurl("javascript:document.execCommand('delete', false, null);"); 
} 
+0

कृपया, कृपया, कृपया अपना स्वरूपण बदलें। धन्यवाद। –