una quitar porque poner online muestra metadatos imagen fotos fondo fecha edicion div completa como borrar android webview contenteditable richtext

quitar - No se puede eliminar la imagen en div satisfactorio en Android



quitar fecha de fotos online (3)

Implementé richTextEditor usando WebView y JavaScript .

No tuve ningún problema para insertar / eliminar una imagen que agregué a la página html editable. El código que he usado para insertar imágenes es

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

Gracias.

Estoy construyendo un editor de texto enriquecido en Android. Para hacerlo, estoy usando un webView con un contentEditable div.

Para agregar estilos, invoco JavaScript . Todo esto funciona bien, excepto cuando invoco JavaScript para insertar una imagen o una regla horizontal. Cuando uso JavaScript para insertar estos elementos, si intento presionar el botón Atrás para eliminar la imagen o la regla horizontal, no funciona.

Por extraño que parezca, si ingreso cualquier otro carácter por primera vez y luego inserto la imagen o la regla horizontal, puedo eliminar la imagen / regla horizontal sin problemas, pero no puedo borrar el carácter que ingresé inmediatamente antes de la imagen / regla horizontal.

Intenté imprimir el HTML en cada estado, verificando la selección / rango, etc., y parece que no puedo encontrar nada diferente sobre el estado que pueda explicar por qué no puedo eliminar la imagen, etc.


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

Lo uso para hacer un editor rico en una vista web

Luego, anule el método TapInputConnection en Webview

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

Se ha dado cuenta de que sendKeyEvent y trato con Delete Key por mi cuenta

Esta es la función delete() ;

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


Android: retroceso en WebView / BaseInputConnection

Subclase Webview y anula el método como se muestra por la pregunta de este tipo.

En algunos teléfonos, solo la pregunta del tipo satisfará los requisitos. La respuesta del enlace completará el código para la compatibilidad con otros teléfonos. Sin embargo, subclases un InputConnectionWrapper. no conexión de entrada y luego devuelva esa envoltura dentro de su vista web personalizada.

Solo un FYI, este enlace tiene una explicación mucho más detallada de la situación, sin embargo, intenté implementar rápidamente sus ideas y no funcionó. Quizás demasiado complicado para mis propósitos. La razón por la que probé su solución en lugar de lo que mencioné anteriormente es porque la solución que mencioné anteriormente hace que la función de voz a texto no funcione correctamente. Android: no se puede capturar retroceso / borrar presionar suavemente. teclado