在Horizo​​ntalScrollView获取孩子的位置,然后滚动到它(Get child lo

2019-08-17 07:12发布

貌似我无法获取或设置在我简单的布局的任何位置或滚动量:

// Relative layout - main_layout
<HorizontalScrollView
    android:id="@+id/MenuScroll"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:fillViewport="true"
    android:scrollbars="none" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:orientation="horizontal"
        android:layout_gravity="center"
        android:padding="0dp" >

        <Button
            android:id="@+id/button1"
            android:layout_width="150dp"
            android:layout_height="fill_parent" />

        <Button
            android:id="@+id/button2"
            android:layout_width="150dp"
            android:layout_height="fill_parent" />

        <Button
            android:id="@+id/button3"
            android:layout_width="150dp"
            android:layout_height="fill_parent" />

        <Button
            android:id="@+id/button4"
            android:layout_width="150dp"
            android:layout_height="fill_parent" />

        <Button
            android:id="@+id/button5"
            android:layout_width="150dp"
            android:layout_height="fill_parent" />

    </LinearLayout>
</HorizontalScrollView>
// End of RelativeLayout - main_layout

我想在我的MainActivity是让内部的任何按钮的位置HorizontalScrollView并滚动到该位置。 目前,我不能让左值(它总是0),如果我尝试scrollToHorizontalScrollView它只是不,不管什么x和y的值。

// imports
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main_layout);

        final Button button3 = (Button)findViewById(R.id.button3);
        Rect rectf = new Rect();
        button3.getLocalVisibleRect(rectf);
        Log.i("Left: ", String.valueOf(rectf.left)); // it is always 0

        HorizontalScrollView MenuScroll = (HorizontalScrollView)findViewById(R.id.MenuScroll);
        // Trying to scroll to X=100 but it doesn't
        MenuScroll.scrollTo(100, MenuScroll.getBottom());
    }
}

所以,正如我所说,我不能让左侧位置对我的按钮,或者可以滚动到我的一些X位置HorizontalScrollView 。 这可能吗?

Answer 1:

(它总是0)

请记住,意见不具有在尺寸onCreate方法,因为它们是在后放置在屏幕上onCreate回调的回报。

我想在我的MainActivity是让Horizo​​ntalScrollView内的任何按键的位置和滚动到该位置。

有一个在下面的代码(放置在onCreate法):

    final HorizontalScrollView MenuScroll = (HorizontalScrollView) findViewById(R.id.MenuScroll);

    MenuScroll.post(new Runnable() {

        @Override
        public void run() {
            final Button button3 = (Button) findViewById(R.id.button3);
            int scrollTo = 0;
            final int count = ((LinearLayout) MenuScroll.getChildAt(0))
                    .getChildCount();
            for (int i = 0; i < count; i++) {
                final View child = ((LinearLayout) MenuScroll.getChildAt(0))
                        .getChildAt(i);                 
                if (child != button3) {
                    scrollTo += child.getWidth();
                } else {
                    break;
                }
            }
            MenuScroll.scrollTo(scrollTo, 0);
        }

    });

另外要小心你在布局中使用的属性(我指的是layout_gravity这可能导致问题,如果我没有记错)。



Answer 2:

它可以直接完成,如:

scrollTo = button3.getLeft();


文章来源: Get child location in HorizontalScrollView and scroll to it