我在xml文件中使用下面的代码并使用textview以编程方式添加子视图但我需要去特定的位置(假设在每个textview中我添加数字从1开始然后我想从总共10个textviews到第5个位置textview)在使用scrollview的视图上。我知道滚动的方法,但我不知道如何从这个布局计算xy cooardinates。请给出指导。
<ScrollView android:layout_width="fill_parent"
android:layout_height="fill_parent" android:scrollbars="vertical"
android:id="@+id/agenda_scroll"
>
<LinearLayout android:id="@+id/inner_layout"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
</LinearLayout>
</ScrollView>
支持我的代码就像这样
ScrollView scview = (ScrollView)findViewById(R.id.Scl);
LinearLayout eventLayout = (LinearLayout) findViewById(R.id.inner_layout);
TextView txtView = new TextView(cx);
txtView.setText("1");
eventLayout.addView(txtview);
TextView txtView = new TextView(cx);
txtView.setText("2");
eventLayout.addView(txtview);
TextView txtView = new TextView(cx);
txtView.setText("3");
eventLayout.addView(txtview);
TextView txtView = new TextView(cx);
txtView.setText("4");
eventLayout.addView(txtview);
TextView txtView = new TextView(cx);
txtView.setText("5");
int y = txtview.getTop();
Log.d(TAG,"YAxis"+y);//returning 0
eventLayout.addView(txtview);
TextView txtView = new TextView(cx);
txtView.setText("6");
eventLayout.addView(txtview);
.........
scview .scrollTo(0,y);///here positions giving (0,0)
答案 0 :(得分:4)
我知道这有点旧,但这是我们见过的工作。每个视图都有ViewTreeObserver
,可用于观察视图及其层次结构。获取ViewTreeObserver
并按如下方式监听布局更改。一旦布局了视图及其层次结构,您就可以执行基于大小和位置的查询。
onCreate(){
//Code
eventLayout.addView(txtview);
TextView txtView = new TextView(cx);
txtView.setText("6");
eventLayout.addView(txtview)
//More code
//Observe for a layout change
ViewTreeObserver viewTreeObserver = eventLayout.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//View and it's hierarchy laid out, perform your operations
scview .scrollTo(0,y);///here positions giving (0,0)
}
});
}
}
答案 1 :(得分:1)
如果您尝试在View.getTop()
中使用onCreate()
,那么您将获得0,因为视图尚未布局。首先onCreate()
结束执行,然后安排事物并绘制它们,然后它等待用户事件,然后你就可以获得视图位置。
我不知道在整个活动布局之后立即做一些干净的事情(一种不干净的方式是使用onWindowFocusChanged()
)。
答案 2 :(得分:0)
开箱即用:为什么不使用自定义ListView,它精确地包含视图列表并轻松访问它们?
另外,您是否尝试在onResume函数中运行此代码而不是onCreate函数?
答案 3 :(得分:0)
我在这里投票给listview,但你有另一个选择是在创建它们时将每个textview存储在一个arraylist中,然后循环它并在需要时找到每个textview的高度。然后滚动到总和的值或计算的任何值。