6

シンプルなレイアウトでは、位置やスクロール量を取得または設定できないようです:

// 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 です)。取得しようとしてscrollToも、HorizontalScrollViewx または 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。これは可能ですか?

4

2 に答える 2

15

(常に 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間違っていなければ問題を引き起こす可能性のある を参照しています)。

于 2013-03-05T11:22:07.293 に答える