ScrollView 的子控件 使用scroll无效的问题

今天发现一个问题,关于ScrollView内的子控件如LinearLayout在使用LinearLayout.scrollto(x,y)方法是会无效的问题。

打从一开始当scrollView无滑动,或者内容没有超出一屏幕高度时,子控件LinearLayout.scrollto(x,y)方法是正常且可行的。

  binding.etPassword.setOnFocusChangeListener((v, hasFocus) -> {
            if (hasFocus) {
                viewModel.passwordHasFocus.set(true);
                binding.ll.scrollTo(0, unDisplayViewSize(binding.clPasswordIcon));
            } else {
                viewModel.passwordHasFocus.set(false);
                binding.ll.scrollTo(0, 0);
            }
        });

但一旦内容超出一屏幕高度后,LinearLayout.scrollto(x,y)的方法就不生效了。

通过多次尝试和查找资料发现。

可以将目标子控件的先通过ScrollView.smoothScrollTo()到子控件相应位置后,再使用子控件LinearLayout.scrollto(x,y)方法就会生效了。
代码如下:

  binding.etPassword.setOnFocusChangeListener((v, hasFocus) -> {
            if (hasFocus) {
                binding.scrollView.smoothScrollTo(0, binding.etPassword.getBottom());
                viewModel.passwordHasFocus.set(true);
                binding.ll.scrollTo(0, unDisplayViewSize(binding.clPasswordIcon));
            } else {
                viewModel.passwordHasFocus.set(false);
                binding.ll.scrollTo(0, 0);
            }
        });
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容