you could use CustomRender,and Custom EditText,overwrite the OnKeyPreIme
method
1.in .Android custom a EditText,here named MyEditText:
class MyEditext :EditText
{
protected MyEditext(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
public MyEditext(Context context) : base(context)
{
}
public MyEditext(Context context, IAttributeSet attrs) : base(context, attrs)
{
}
public MyEditext(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr)
{
}
public MyEditext(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes) : base(context, attrs, defStyleAttr, defStyleRes)
{
}
//This method can be used to intercept keystroke events, typically handling the back key, updating the UI, and if you don't override this method, the IME will default to handling the keyboard (usually the keyboard disappears)
public override bool OnKeyPreIme(Keycode keyCode, KeyEvent e)
{
if (keyCode == Keycode.Back)
{
if (listener !=null)
{
listener.onKeyBack();
return true;
}
}
return base.OnKeyPreIme(keyCode, e);
}
private OnEditTextKeyBackListener listener;
public void SetOnEditTextKeyBackListener(OnEditTextKeyBackListener listener)
{
this.listener = listener;
}
public interface OnEditTextKeyBackListener
{
void onKeyBack();
}
}
2.use CustomRender, create MyEntryRenderer :
[assembly: ExportRenderer(typeof(Entry), typeof(MyEntryRender))]
namespace App18.Droid
{
class MyEntryRender : ViewRenderer<Entry,EditText>, MyEditext.OnEditTextKeyBackListener
{
private Context _context;
public MyEntryRender(Context context) : base(context)
{
_context = context;
}
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
MyEditext editext = new MyEditext(_context);
SetNativeControl(editext);
editext.SetOnEditTextKeyBackListener(this);
}
public void onKeyBack()
{
_context.GetActivity().OnBackPressed();
}
}
}