【问题标题】:Titanium Android need to scroll the page when keyboard is visibleTitanium Android需要在键盘可见时滚动页面
【发布时间】:2017-03-18 17:21:45
【问题描述】:

当我单击文本字段时,会出现一个键盘。但是,这会将窗口的所有内容向上滑动。你能让键盘越过窗口而不滚动内容吗?

【问题讨论】:

    标签: listview titanium appcelerator-titanium


    【解决方案1】:

    背景

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

    当输入法出现在屏幕上时,它会减少输入法的数量 可用于您应用的 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 确保项目的位置不依赖于设备高度(可以改变)。

    例如

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

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

    这样,当键盘向上时,视图的高度不会降低,键盘只会越过内容而不是向上移动项目。但是,如果设备高度小于 500 像素,您现在有可能会从屏幕上裁剪某些内容。此外,当键盘打开时,您的空间会更小,这意味着可以剪掉更多的东西。

    解决方案是使用scrollable view。例如:

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

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

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

    【讨论】:

    • 我在window里面有一个listview,我得给上面描述的高度吗?
    • 您能否在您的问题中显示代码的 MCV (stackoverflow.com/help/mcve),以便我提出解决方案。另请注意,我对问题进行了大量修改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2019-04-29
    • 2012-04-16
    • 2015-07-04
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多