我正在写一个表单应用程序。如何定位在屏幕底部的视图,当一些条目集中和键盘可见时,视图在键盘上方?在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以上才能看到它在键盘上。
希望有帮助!