gpt4 book ai didi

android - 在 ScrollView 中滚动到 TableLayout 的最后一行

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:15 25 4
gpt4 key购买 nike

我想要一个动态表,随着时间的推移,用户交互会添加行,使用 ScrollView 中的 TableLayout。这工作正常,但是当我想使用 fullScroll() 滚动到表的末尾时, 它总是遗漏最后一行;也就是说,它滚动以便最后一个之前的那个可见。手动滚动时最后一行是可见的,滚动条也是正确的。

我当然乐于接受关于如何从中做出更好布局的建议;但我特别想了解为什么 fullScroll() 会这样。我应该给它一个不同的参数,还是完全使用其他参数?还是这样做是因为新添加的行不知何故还不可见? (如果是这样,我该如何解决?)还是我错过了其他一些明显的事情?

下面的代码重现了这个问题:

测试 Activity .java:

package com.example.android.tests;

import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class TestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

((Button) findViewById(R.id.AddRow)).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Random rnd = new Random();
TableRow nr = new TableRow(v.getContext());
for (int c=0; c<3; c++) {
TextView nv = new TextView(v.getContext());
nv.setText(Integer.toString(rnd.nextInt(20)-10));
nr.addView(nv);
}
((TableLayout) findViewById(R.id.Table)).addView(nr);
// Scrolls to line before last - why?
((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);
}
});

}
}

主.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:text="Add Row"
android:id="@+id/AddRow"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
<ScrollView
android:id="@+id/TableScroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/AddRow"
android:layout_alignParentTop="true" >
<TableLayout
android:id="@+id/Table"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="0,1,2" />
</ScrollView>
</RelativeLayout>

编辑:作为引用,我实现了 Romain Guy的解决方法如下:

在 TestActivity.java 中,替换:

            // Scrolls to line before last - why?
((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);

与:

            // Enqueue the scrolling to happen after the new row has been layout
((ScrollView) findViewById(R.id.TableScroller)).post(new Runnable() {
public void run() {
((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);
}

});

效果很好。

最佳答案

在您执行 fullScroll() 时布局尚未发生,因此 ScrollView 使用表格的“旧”尺寸。不要立即调用 fullScroll(),而是使用 View.post(Runnable)。

关于android - 在 ScrollView 中滚动到 TableLayout 的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3087877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com