当Android键盘可见时,Titanium Android需要滚动页面

时间:2017-03-18 17:21:45

标签: listview titanium appcelerator-titanium

当我点击文本字段时,会出现一个键盘。但是,这会向上滑动窗口的所有内容。你可以让键盘在没有滚动内容的情况下翻过窗口吗?

1 个答案:

答案 0 :(得分:2)

背景

我强烈建议您阅读有关Handling Input Method Visibility的官方Android文档,其中提及:

  

当输入法出现在屏幕上时,它会减少数量   可用于应用UI的空间。系统做出决定   它应该如何调整UI的可见部分,但它可能不会   修正它。为了确保应用程序的最佳行为,您应该这样做   指定您希望系统如何在剩余的UI中显示您的UI   空间。

换句话说,当键盘出现时,它可以改变视图的外观,具体取决于许多因素。

其中一个因素是windowSoftInputMode,如下所述:

这些是windowSoftInputMode ...

的选项

以下选项仅在窗口处于焦点时弹出或不弹出键盘时影响,而不影响视图中的项目:

  • SOFT_INPUT_STATE_ALWAYS_HIDDEN :当前重量级窗口获得焦点时,始终隐藏软输入区域(即软件键盘)。
  • SOFT_INPUT_STATE_ALWAYS_VISIBLE :当前重量级窗口获得焦点时,始终显示软输入区域(即软件键盘)。
  • SOFT_INPUT_STATE_HIDDEN :当前重量级窗口获得焦点时,尝试隐藏软输入区域(即软件键盘)。基本上,这会阻止键盘在输入存在时打开窗口时自动弹出。
  • SOFT_INPUT_STATE_VISIBLE :当前重量级窗口获得焦点时,尝试显示软输入区域(即软件键盘)。
  • SOFT_INPUT_STATE_UNSPECIFIED :使用系统默认行为确定当前重量级窗口获得焦点时是否显示软输入区域(即软件键盘)。

以下选项是您最感兴趣的选项,因为它们与视图在键盘打开时的反应方式有关:

  • SOFT_INPUT_ADJUST_PAN :在显示输入法(即软件键盘)时平移当前重量级窗口,以确保其内容不会被遮挡。
  • SOFT_INPUT_ADJUST_RESIZE :在显示输入法(即软件键盘)时调整当前重量级窗口的大小,以确保其内容不会被遮挡。
  • SOFT_INPUT_ADJUST_UNSPECIFIED :使用系统默认行为确定当前重量级窗口在获得焦点时如何容纳软输入区域(即软件键盘)(默认值)。取决于AndroidManifest。 xml设置(如果已定义)或系统默认设置,否则确定在可见时如何容纳软键盘。

注意你可以组合这样的选项:

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 确保项目的位置不依赖于设备高度(可以更改)。

e.g。

<View height="500px">
    ...
</View>

OR

<View height="Titanium.UI.SIZE">
    ....
</View>

这样,当键盘上升时,视图的高度不会降低,键盘只会覆盖内容而不是向上移动项目。但是,如果设备高度小于500px,您现在冒着从屏幕上裁剪掉某些东西的风险。此外,当键盘启动时,您的空间更小,这意味着可以裁掉更多东西。

对此的解决方案是使用scrollable view。 e.g:

<ScrollableView height="500px">
    ...
</ScrollableView>

<ScrollableView height="Titanium.UI.SIZE">
    ...
</ScrollableView>

现在,如果设备屏幕太小,用户仍然可以滚动查看屏幕的其他部分。用户甚至可以在键盘启动时滚动。