如何将视图定位在键盘的正上方



我正在写一个表单应用程序。如何定位在屏幕底部的视图,当一些条目集中和键盘可见时,视图在键盘上方?在android上,可以设置Window.SetSoftInputMode(SoftInput.AdjustResize),这将使Content在每次键盘出现/消失时调整大小。然而,我需要状态栏是透明的,SoftInput.AdjustResize不与WindowManagerFlags.TranslucentStatus工作。我的问题是,如何在不设置SoftInput.AdjustResize的情况下将视图置于键盘上方?

举个例子:

    public Page1()
    {
        InitializeComponent();
        var al = new StackLayout
        {
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand
        };
        var button = new BoxView {Color = Color.Red, VerticalOptions = LayoutOptions.EndAndExpand};
        var entry = new Entry {HorizontalOptions = LayoutOptions.Fill};

        al.Children.Add(entry);
        al.Children.Add(button);
        Content = al;
        Content.SizeChanged += (sender, args) =>
        {
            button.Layout(new Rectangle(0, Content.Height - 120, App.Dimensions.Width, 120));
        };
    }

如果你运行这段代码,当你按下输入,什么都不会改变,"按钮"将保持在屏幕底部不可见,因为覆盖键盘。

如果我们在MainActivity的onCreate中添加Window.SetSoftInputMode(SoftInput.AdjustResize),它工作得很好,框在输入焦点上移动到键盘上方。

同样,如果我们将Content = al;更改为Content = new ScrollView {Content = al};,它也可以正常工作。

然而,如果我们在MainActivity的onCreate中添加Window.AddFlags(WindowManagerFlags.TranslucentStatus);,这些方法都不再工作了。

提前感谢。

我正在写一个表单应用程序。如何定位一个视图的底部在屏幕上,当某些输入被聚焦,键盘可见时,视图要在键盘的正上方吗?

如果你正在使用Xamarin Forms,那么在ScrollView中包装你的UI元素就可以了。如果你使用的是XAML:

<ScrollView>
    <ScrollView.Content>
        //  Your Original XAML content here
    </ScrollView.Content>
<ScrollView
编辑:

看了你刚才加的例子,我想我知道是怎么回事了。ScrollView技巧只适用于需要键盘输入的元素。例如,如果你在屏幕底部有一个入口元素,并像我建议的那样将所有内容包装在ScrollView中,那么键盘应该为你将入口元素推到上面。然而,在你的情况下,你有一个框视图在屏幕的底部,键盘只是运行。

您的内容。SizedChanged是一个好主意,但我不认为视图的大小实际上改变当键盘弹出(至少,内容。当键盘弹出时不会调用sizechange),因此这部分代码实际上只在从您提供的MCVE加载页面时调用。

然而,当键盘出现时,我可以通过以下操作将"按钮"向上移动:

代替

Content.SizeChanged += (sender, args) =>
{
    button.Layout(new Rectangle(0, Content.Height - 120, App.Dimensions.Width, 120));
};

entry.Focused += (sender, e) => 
{
    button.TranslationY -= 120;
};

对于所有不同的设备和方向,你可能需要很长时间才能得到那个神奇的翻译数。当我在iPhone 6模拟器上测试它时,我必须把它推到120以上才能看到它在键盘上。

希望有帮助!

最新更新