我使用Xamarin.Forms与Android。我有这对于用户输入密码4所控制的一种形式。我使用TextChanged事件来检测用户的输入,并自动将焦点移动到下一个控件。这部分工作正常,即如用户键入数字的焦点会自动跳转到下一个条目。不过,我需要实现相反,用户应该能够挖掘退格键和重点应该移动到前面的控制。问题是,当输入控件为空框TextChanged不会被触发。我怎样才能做到这一点?是否有一个自定义渲染我可以创建为Android捕获文本输入?也许有使用1项而不是一个办法,但我需要使它看起来像不同的4盒。
最后,我已经实现在Android上渲染找到一个解决方案。
在共享代码(PCL),创建这样的类
public class CustomEntry:Entry
{
public delegate void BackspaceEventHandler(object sender, EventArgs e);
public event BackspaceEventHandler OnBackspace;
public CustomEntry()
{
}
public void OnBackspacePressed()
{
if (OnBackspace != null)
{
OnBackspace(null, null);
}
}
}
而且,然后在你的Android项目创建这样的渲染器:
public class CustomEntryRenderer: EntryRenderer
{
public override bool DispatchKeyEvent(KeyEvent e)
{
if (e.Action == KeyEventActions.Down)
{
if (e.KeyCode == Keycode.Del)
{
if (string.IsNullOrWhiteSpace(Control.Text))
{
var entry = (PasswordBox)Element;
entry.OnBackspacePressed();
}
}
}
return base.DispatchKeyEvent(e);
}
protected override void
OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
}
}
然后用它是这样的:
Entry1.OnBackspace += Entry1BackspaceEventHandler;
public void Entry1BackspaceEventHandler()
{
//things you want to do
}