在scrollView中的相对布局之间动态滚动

时间:2014-01-08 12:27:33

标签: android android-layout android-scrollview

我有一个滚动视图,其中我有几个相对布局。并且相对布局有两个按钮动态添加到它。如下所示

滚动视图

  _____________________
 |   ________________  |
 |  |Relative Layout|  |
 |  |   |Buttons|   |  |
 |  |_______________|               
 |                     |
 |   ________________  |
 |  |Relative Layout|  |
 |  |   |Buttons|   |  |
 |  |_______________|                 
 |                     |
 |  |Relative Layout|  |
 |  |   |Buttons|   |  |
 |  |_______________|               
 |                     |
 |   ________________  |
 |  |Relative Layout|  |
 |  |   |Buttons|   |  |
 |  |_______________|                  
 |                     |
 |  |Relative Layout|  |
 |  |   |Buttons|   |  |
 |                     |
 |_____________________|

是否可以在按钮单击时动态滚动到特定的相对布局。 我已经在下面尝试了它不能正常工作

if (count == 1) {
    final int k = id;
mScrollView.getViewTreeObserver().addOnGlobalLayoutListener(
        new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
                public void onGlobalLayout() {
            // TODO Auto-generated
        // method stub
        mScrollView.post(new Runnable() {
                @Override
            public void run() {
            Button btn = (Button) findViewById(k);
            mScrollView.smoothScrollTo(0,btn.getTop());
                }
        });

滚动到也无效

编辑: 最初我在相对布局中只有一组按钮。然后smoothScrollTo按预期工作。后来我把结构改成了上面的风格。

1 个答案:

答案 0 :(得分:5)

@Daniel Bo的提示是正确的。

view.getTop()将提供相对于其直接父级的位置。

以下是实施。

ScrollView mScrollView = (ScrollView) findViewById(R.id.scroll_view);
mScrollView.post(new Runnable() {
    public void run() { 
        Button btn = (Button) findViewById(k); 
        ViewGroup vg =(ViewGroup)btn.getParent();
        mScrollView.smoothScrollTo(0,vg.getTop());
     }});
}