如果可扩展布局超出屏幕,则 ScrollView 显示布局
Posted
技术标签:
【中文标题】如果可扩展布局超出屏幕,则 ScrollView 显示布局【英文标题】:ScrollView to show layout if expandable layout goes outside the screen 【发布时间】:2020-12-22 15:35:36 【问题描述】:我的 android 应用中有几个可扩展的布局。当我单击展开布局时,布局会在屏幕外消失,我必须手动向下滚动以使其可见。如何让 ScrollView 自动向下滚动以使点击的布局可见?
我尝试使用scrollView.scrollTo(0, textID.getBottom());
滚动到布局元素的底部,但没有成功。
Java:
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();
scrollView.scrollTo(0, textID.getBottom());
);
xml:
<LinearLayout
android:id="@+id/box"
android:layout_
android:layout_
android:orientation="vertical">
<LinearLayout
android:id="@+id/box_header"
android:layout_
android:layout_
android:orientation="horizontal">
<TextView
android:id="@+id/textID"
android:layout_
android:layout_
android:text="title"
android:textColor="#ffffff"
android:textSize="16sp"/>
</LinearLayout>
<net.cachapa.expandablelayout.ExpandableLayout
android:id="@+id/expandable_layout1"
android:layout_
android:layout_
app:el_duration="1000"
app:el_expanded="false"
app:el_parallax="0.5">
<TextView
android:layout_
android:layout_
android:text="some text"
android:textColor="#ffffff"
android:textSize="12sp"/>
</net.cachapa.expandablelayout.ExpandableLayout>
</LinearLayout>
【问题讨论】:
【参考方案1】:您面临的问题是 ExpandableLayout 在 ScrollView 滚动到底部之前没有时间完成打开。所以最终发生的是 ScrollView 滚动到尚未完全打开的 ExpandableLayout 的底部。您需要做的是在 Layout 打开和 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 显示布局的主要内容,如果未能解决你的问题,请参考以下文章
010-Android开发解决控件超出屏幕,不能正常显示的问题