Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 滚动视图,在可扩展布局超出屏幕时显示布局_Java_Android_Android Studio_Android Layout_Expandable - Fatal编程技术网

Java 滚动视图,在可扩展布局超出屏幕时显示布局

Java 滚动视图,在可扩展布局超出屏幕时显示布局,java,android,android-studio,android-layout,expandable,Java,Android,Android Studio,Android Layout,Expandable,我的Android应用程序中有几个可扩展的布局。当我点击展开一个布局时,该布局在屏幕外消失,我必须手动向下滚动以使其可见。如何使ScrollView自动向下滚动以使单击的布局可见 我尝试使用scrollView.scrollTo(0,textID.getBottom())滚动到布局元素的底部,但没有运气 爪哇: xml: 您面临的问题是,在ScrollView滚动到底部之前,ExpandableLayout没有时间完成打开。因此,最终的结果是ScrollView滚动到ExpandableLayo

我的Android应用程序中有几个可扩展的布局。当我点击展开一个布局时,该布局在屏幕外消失,我必须手动向下滚动以使其可见。如何使ScrollView自动向下滚动以使单击的布局可见

我尝试使用
scrollView.scrollTo(0,textID.getBottom())
滚动到布局元素的底部,但没有运气

爪哇:

xml:


您面临的问题是,在ScrollView滚动到底部之前,ExpandableLayout没有时间完成打开。因此,最终的结果是ScrollView滚动到ExpandableLayout的底部,而ExpandableLayout尚未完全打开。您需要做的是在版面打开和ScrollView启动滚动功能之间添加延迟。这是您需要的代码,我会尝试调整毫秒数,您可能会将它们降到1000以下,但不会太多,但仍取决于您对其进行故障排除,使其更快、更平滑。还可以尝试使用smoothScrollTo而不是scrollTo

expandableLayout1 = root.findViewById(R.id.expandable_layout1);
    button = (LinearLayout)root.findViewById(R.id.box_header);
    button.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            if (expandableLayout1.isExpanded()) {
                expandableLayout1.collapse();
            } else {
                expandableLayout1.expand();

                new Handler().postDelayed(new Runnable() {

                    @Override
                    public void run() {

                         scrollView.post(new Runnable() {
                             @Override
                             public void run() {

                                 scrollView.scrollTo(0, textID.getBottom());

                             }
                         });

                    }
                 }, 1000 ); // time in milliseconds
                
            }
        }
    });
这是我以原始形式添加的代码,可能会帮助您更容易理解它

new Handler().postDelayed(new Runnable() {
 @Override
 public void run() {

 // do something

 }
}, 1000 );  // time in milliseconds

您面临的问题是,在ScrollView滚动到底部之前,ExpandableLayout没有时间完成打开。因此,最终的结果是ScrollView滚动到ExpandableLayout的底部,而ExpandableLayout尚未完全打开。您需要做的是在版面打开和ScrollView启动滚动功能之间添加延迟。这是您需要的代码,我会尝试调整毫秒数,您可能会将它们降到1000以下,但不会太多,但仍取决于您对其进行故障排除,使其更快、更平滑。还可以尝试使用smoothScrollTo而不是scrollTo

expandableLayout1 = root.findViewById(R.id.expandable_layout1);
    button = (LinearLayout)root.findViewById(R.id.box_header);
    button.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            if (expandableLayout1.isExpanded()) {
                expandableLayout1.collapse();
            } else {
                expandableLayout1.expand();

                new Handler().postDelayed(new Runnable() {

                    @Override
                    public void run() {

                         scrollView.post(new Runnable() {
                             @Override
                             public void run() {

                                 scrollView.scrollTo(0, textID.getBottom());

                             }
                         });

                    }
                 }, 1000 ); // time in milliseconds
                
            }
        }
    });
这是我以原始形式添加的代码,可能会帮助您更容易理解它

new Handler().postDelayed(new Runnable() {
 @Override
 public void run() {

 // do something

 }
}, 1000 );  // time in milliseconds