Java 滚动视图,在可扩展布局超出屏幕时显示布局
我的Android应用程序中有几个可扩展的布局。当我点击展开一个布局时,该布局在屏幕外消失,我必须手动向下滚动以使其可见。如何使ScrollView自动向下滚动以使单击的布局可见 我尝试使用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
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