我有一个条目和一个按钮:
<StackLayout>
<CustomViews:ChatEntryView x:Name="ChatEntry" />
<Button Text="Send" Command="SendCommand"/>
</StackLayout>
我想在这里实现的是当用户在Entry控件上开始输入类型然后按下按钮时,它不应该隐藏键盘(或丢失Entry Focus)。
这里的ChatEntryView实际上是一个自定义视图,它继承自Entry控件以及我在里面所做的事情:
1。)添加了一个未聚焦的处理程序
Unfocused += ChatEntryView_Unfocused;
void ChatEntryView_Unfocused(object sender, FocusEventArgs e)
{
this.Focus();
}
2.)在PropertyChanged上尝试处理
protected override void OnPropertyChanged(string propertyName = null)
{
this.Focus();
base.OnPropertyChanged(propertyName);
}
3.)尝试处理PropertyChanging
protected override void OnPropertyChanging(string propertyName = null)
{
this.Focus();
base.OnPropertyChanging(propertyName);
}
但这三种方法似乎都不起作用。我能够通过制作自定义渲染器来解决IOS问题,而且它不是很整洁(通过实际连接到IOS上的Control.ShouldEndEditing)。
但我现在的问题是在Android上,因为我不知道如何在Android上执行此操作,并且我无法使用Control.ShouldEndEditing(Android上的界面)。
使用上面的处理程序会发生的情况是,输入视图的键盘仍然失去焦点,然后立即再次聚焦,这是非常奇怪的。
键盘向下按(失去焦点),然后向上推(强制对焦)。
答案 0 :(得分:0)
我知道回答这个问题为时已晚,但它可能对其他人有帮助,我将此代码添加到MainActivity,它可能不是一个简洁的解决方案,但对我有用:
private bool _lieAboutCurrentFocus;
public override bool DispatchTouchEvent(MotionEvent ev)
{
var focused = CurrentFocus;
bool customEntryRendererFocused = focused != null && focused.Parent is CustomEntryRenderer_Droid;
_lieAboutCurrentFocus = customEntryRendererFocused;
var result = base.DispatchTouchEvent(ev);
_lieAboutCurrentFocus = false;
return result;
}
public override View CurrentFocus
{
get
{
if (_lieAboutCurrentFocus)
{
return null;
}
return base.CurrentFocus;
}
}