我正在编写一个Forms应用程序。如何在屏幕底部放置视图,当某些条目聚焦且键盘可见时,视图位于键盘正上方?在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);
,则这些方法都不再有效。
提前致谢。
答案 0 :(得分:1)
我正在编写一个Forms应用程序。如何将视图定位在底部 屏幕,当某些条目聚焦并且键盘可见时, 视图位于键盘正上方?
如果您使用的是Xamarin Forms,那么将您的UI元素包装在ScrollView中应该可以解决问题。如果你使用的是XAML,那会是这样的:
<ScrollView>
<ScrollView.Content>
// Your Original XAML content here
</ScrollView.Content>
<ScrollView
编辑:
看看你刚刚添加的例子,我想我知道发生了什么。因此,ScrollView Trick仅适用于需要键盘输入的元素。即如果您在屏幕底部有一个入口元素,并且像我建议的那样将所有内容包装在ScrollView中,那么键盘应该为您推送入口元素。但是在你的情况下,屏幕底部有一个框视图,键盘只是在其上运行。
您对Content.SizedChanged所拥有的是一个好主意,但是我不认为当键盘弹出时视图的大小实际发生了变化(至少,当调用时没有调用Content.SizeChanged)键盘弹出),因此部分代码实际上只在从您提供的MCVE加载页面时被调用。
但是,我能够移动按钮&#39;键盘出现时执行此操作:
替换
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以上,然后才能在键盘上方看到它。
希望有所帮助!