【发布时间】:2017-03-18 17:21:45
【问题描述】:
当我单击文本字段时,会出现一个键盘。但是,这会将窗口的所有内容向上滑动。你能让键盘越过窗口而不滚动内容吗?
【问题讨论】:
标签: listview titanium appcelerator-titanium
当我单击文本字段时,会出现一个键盘。但是,这会将窗口的所有内容向上滑动。你能让键盘越过窗口而不滚动内容吗?
【问题讨论】:
标签: listview titanium appcelerator-titanium
我强烈建议阅读有关 Handling Input Method Visibility 的官方 Android 文档,其中提到:
当输入法出现在屏幕上时,它会减少输入法的数量 可用于您应用的 UI 的空间。系统做出决定 它应该如何调整 UI 的可见部分,但它可能不会 修正它。为了确保您的应用程序的最佳行为,您应该 指定您希望系统如何在剩余部分中显示您的 UI 空间。
换句话说,当键盘出现时,它可以根据多种因素改变您的视图外观。
其中一个因素是windowSoftInputMode,如下所述:
这些是windowSoftInputMode的选项...
以下选项仅影响在窗口处于焦点时是否弹出键盘,而不影响视图中的项目:
以下选项是您最感兴趣的选项,因为它们与视图在键盘打开时应如何反应有关:
请注意,您可以像这样组合选项:
win.windowSoftInputMode = Ti.UI.Android.SOFT_INPUT_STATE_ALWAYS_VISIBLE | Ti.UI.Android.SOFT_INPUT_ADJUST_PAN;
您的所有项目都被移动的原因是因为窗口正在使用:SOFT_INPUT_ADJUST_RESIZE,并且某些东西正在使用百分比垂直定位。例如:
<View height="100%">
<Label top="10">Top label</Label>
<Label>Centre label</Label>
<Label bottom="10">Bottom label</Label>
</View>
这意味着当键盘向上时,视图的整体高度会降低,从而将所有项目向上移动。
这个问题有两个主要的解决方案。
解决方案 1
使窗口使用SOFT_INPUT_ADJUST_PAN。这不会降低应用程序的整体高度,而是平移到屏幕的相关部分。因此,这应该会阻止所有项目向上移动。
解决方案 2 确保项目的位置不依赖于设备高度(可以改变)。
例如
<View height="500px">
...
</View>
或
<View height="Titanium.UI.SIZE">
....
</View>
这样,当键盘向上时,视图的高度不会降低,键盘只会越过内容而不是向上移动项目。但是,如果设备高度小于 500 像素,您现在有可能会从屏幕上裁剪某些内容。此外,当键盘打开时,您的空间会更小,这意味着可以剪掉更多的东西。
解决方案是使用scrollable view。例如:
<ScrollableView height="500px">
...
</ScrollableView>
或
<ScrollableView height="Titanium.UI.SIZE">
...
</ScrollableView>
现在,如果设备屏幕太小,用户仍然可以滚动查看屏幕的其他部分。用户甚至可以在键盘打开时滚动。
【讨论】: