【问题标题】:I want to trigger OnScrollChangeListener for certain space scrolled我想为某些滚动空间触发 OnScrollChangeListener
【发布时间】:2020-10-24 16:27:21
【问题描述】:

我有一个滚动视图,当我拖动某些 Y 偏移量时它需要隐藏键盘,目前当我输入编辑文本时它总是会关闭我的键盘,但我想要做的是在例如视图时执行 hideKeyboard()已滚动 Y 个单位

binding.scrollView.setOnScrollChangeListener { view, i, i2, i3, i4 ->
            hideKeyboard()
        }

我想添加这样的条件

binding.scrollView.setOnScrollChangeListener { view, i, i2, i3, i4 ->
            if(position_dragged_in_Y > some_value)
            hideKeyboard()
        }

我该怎么做?谢谢

【问题讨论】:

    标签: android android-layout kotlin android-scrollview


    【解决方案1】:

    在设置OnScrollChanceListener 时,我得到了以下属性:

        scrollview.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
        }
    

    所以,OnScrollChangeListener 已经为我们提供了 scrollY 位置的当前位置。要设置类似条件(如果scrollY >= someYPosition),您可以在滚动视图中添加一个不可见的视图,如下所示:

            <View
                android:id="@+id/myInvisibleViewForCondition"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
    

    然后,为了获得myInvisibleViewForCondition 的绝对 Y 位置,我们使用以下扩展函数:

    fun View.getLocationOnScreen(): Point {
        val location = IntArray(2)
        this.getLocationOnScreen(location)
        return Point(location[0],location[1])
    }
    

    现在我们可以开始处理条件了:

        scrollview.setOnScrollChangeListener { _, _, scrollY, _, _ ->
            val absolutPositionOfInvisibleView = myInvisibleViewForCondition.getLocationOnScreen()
            val yPositionOfInvisibleView = absolutPositionOfInvisibleView.y
            if (scrollY > yPositionOfInvisibleView) {
                hideKeyboad()
            }
        }
    

    我无法测试该功能,所以现在让我测试一下,如果可行的话。

    干杯

    【讨论】:

      猜你喜欢
      • 2013-01-08
      • 1970-01-01
      • 2014-11-20
      • 2013-10-31
      • 1970-01-01
      • 2016-06-29
      • 2013-04-27
      • 1970-01-01
      • 2019-01-28
      相关资源
      最近更新 更多