如何通过知道元素ID滚动到ScrollView内的特定视图元素

问题描述:

我的布局位于ScrollView之内。元素的id和我想要与我的搜索滚动的元素的类型,我发现下面的代码来做到这一点,但我没有成功滚动到特定于id的元素,我给了0,id作为两个参数。如何通过知道元素ID滚动到ScrollView内的特定视图元素

ScrollView sv = (ScrollView) mainActivity.findViewById(R.id.scrollview); 
    scrollview.scrollTo(0,id); 

获取ScrollView的ViewTreeObserver并将OnGlobalLayoutListener添加到ViewTreeObserver。然后从OnGlobalLayoutListener的onGlobalLayout()方法调用ScrollView.scrollTo(x,y)方法。

ScrollView mainScroll = (ScrollView) findViewById(R.id.average_scroll_mainScroll); 

ViewTreeObserver vto = scrollView.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     public void onGlobalLayout() { 
      mainScroll.scrollTo(0, 0); 
     } 
}); 

Source.礼貌 - 法赫米:)

但是这里的前提条件是,它需要的视图的位置,以滚动的,而不是它的ID。 所以你必须先找到你的视图位置,然后将它们作为参数传递给scrollTo。使用下面的用于获取位置,

View.getLocationOnScreen(int[] location); 

此返回一个整数数组,其中(X =位置[0]和Y =位置[1])。这个方法是docs

+0

k.What我应该作为参数传递scrollTo直接元素ID将工作? – praveen

+0

立即看到我的编辑并尝试这一个。让我知道事情的后续。此外,我发现这个方法getGlobalVisibleRect()在这里,http://*.com/questions/3619693/getting-views-coordinates-relative-to-the-root-layout。如果第一个不适合你的需要,试试这个。 –

+0

但我只是有id,元素类型只与我这些只有我不能滚动 – praveen