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