private bool backspaceOrForwardDelete(android.view.View view, android.text.Editable content, int keyCode, android.view.KeyEvent @event, bool isForwardDelete) { // Ensure the key event does not have modifiers except ALT or SHIFT. if (!android.view.KeyEvent.metaStateHasNoModifiers(@event.getMetaState() & ~(android.view.KeyEvent .META_SHIFT_MASK | android.view.KeyEvent.META_ALT_MASK))) { return false; } // If there is a current selection, delete it. if (deleteSelection(view, content)) { return true; } // Alt+Backspace or Alt+ForwardDelete deletes the current line, if possible. if (@event.isAltPressed() || getMetaState(content, META_ALT_ON) == 1) { if (deleteLine(view, content)) { return true; } } // Delete a character. int start = android.text.Selection.getSelectionEnd(content); int end; if (isForwardDelete || @event.isShiftPressed() || getMetaState(content, META_SHIFT_ON ) == 1) { end = android.text.TextUtils.getOffsetAfter(content, start); } else { end = android.text.TextUtils.getOffsetBefore(content, start); } if (start != end) { content.delete(System.Math.Min(start, end), System.Math.Max(start, end)); return true; } return false; }
/// <summary> /// You can call this function yourself to have the scroll view perform /// scrolling from a key event, just as if the event had been dispatched to /// it by the view hierarchy. /// </summary> /// <remarks> /// You can call this function yourself to have the scroll view perform /// scrolling from a key event, just as if the event had been dispatched to /// it by the view hierarchy. /// </remarks> /// <param name="event">The key event to execute.</param> /// <returns>Return true if the event was handled, else false.</returns> public virtual bool executeKeyEvent(android.view.KeyEvent @event) { mTempRect.setEmpty(); if (!canScroll()) { if (isFocused()) { android.view.View currentFocused = findFocus(); if (currentFocused == this) { currentFocused = null; } android.view.View nextFocused = android.view.FocusFinder.getInstance().findNextFocus (this, currentFocused, android.view.View.FOCUS_RIGHT); return nextFocused != null && nextFocused != this && nextFocused.requestFocus(android.view.View .FOCUS_RIGHT); } return false; } bool handled = false; if (@event.getAction() == android.view.KeyEvent.ACTION_DOWN) { switch (@event.getKeyCode()) { case android.view.KeyEvent.KEYCODE_DPAD_LEFT: { if ([email protected]()) { handled = arrowScroll(android.view.View.FOCUS_LEFT); } else { handled = fullScroll(android.view.View.FOCUS_LEFT); } break; } case android.view.KeyEvent.KEYCODE_DPAD_RIGHT: { if ([email protected]()) { handled = arrowScroll(android.view.View.FOCUS_RIGHT); } else { handled = fullScroll(android.view.View.FOCUS_RIGHT); } break; } case android.view.KeyEvent.KEYCODE_SPACE: { pageScroll(@event.isShiftPressed() ? android.view.View.FOCUS_LEFT : android.view.View .FOCUS_RIGHT); break; } } } return handled; }