【问题标题】:Xamarin Forms Entry Keyboard Stop From Losing FocusXamarin 表单输入键盘停止失去焦点
【发布时间】:2017-04-23 20:26:24
【问题描述】:

我有一个条目和一个按钮:

<StackLayout>
    <CustomViews:ChatEntryView x:Name="ChatEntry" />
    <Button Text="Send" Command="SendCommand"/>
</StackLayout>

我想在这里实现的是,当用户开始在 Entry 控件上键入内容然后按下按钮时,它不应该隐藏键盘(或失去 Entry Focus)。

这里的 ChatEntryView 实际上只是一个自定义视图,它继承自 Entry 控件以及我在里面所做的:

1.) 添加了 Unfocused 处理程序

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 上的界面)。

使用上面的处理程序会发生什么,入口视图的键盘仍然失去焦点,然后立即再次获得焦点,这很奇怪。

键盘按下(失去焦点)然后向上推(强制焦点)。

【问题讨论】:

  • 据我所知,使用焦点无法保持键盘显示。因为当你点击按钮时,入口的焦点会丢失,按钮会在那个时候获得焦点。键盘将隐藏。我认为您应该覆盖键盘行为。

标签: android xamarin xamarin.android xamarin.forms


【解决方案1】:

我知道现在回答这个问题为时已晚,但它可能对其他人有帮助,我将此代码添加到 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;
        }
    }

【讨论】:

  • 你能粘贴整个班级吗? MainActivity 上不存在公共覆盖 View CurrentFocus
猜你喜欢
  • 2014-06-15
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 2023-03-08
相关资源
最近更新 更多