2

多くのボタンを備えた ScrollView があります。ユーザーがそのボタン/レベルのロックを解除すると、各ボタンが有効になります。ScrollView を最新のロック解除されたボタン/レベルに集中させたいと思います。以下のスクリーンショットを参照してください。

ここに画像の説明を入力

scrollTo()ScrollView を一番上、ボタンなどにフォーカスできるような関数がいくつか見つかりましたがLevel 8、下のスクリーンショットにあるボタン ID のような特定の場所に ScrollView をフォーカスしたいと思います。どうすればこれを行うことができますか?

4

7 に答える 7

2

これで十分だと思います:

  yourButtonView.getParent().requestChildFocus(yourButtonView,yourButtonView);

public void RequestChildFocus (View child, View focus)

child - フォーカスを必要とするこの ViewParent の子。このビューには、フォーカスされたビューが含まれます。実際に焦点を当てているのは必ずしもビューではありません。

focused - 実際にフォーカスがある child の子孫であるビュー

于 2015-08-01T17:42:17.237 に答える
1

最初に、次のコードを使用してそのアイテムをフォーカスできることがわかったら、フォーカスを取得する必要があるスクロール内のアイテムの位置を知る必要があります

    final int x;
            final int y;
            x = rowview[pos].getLeft();
            y = rowView[pos].getTop();

                yourScrollView.scrollTo(x, y);

この質問を参照してください

于 2013-08-12T13:40:39.137 に答える
0

この回答から取得したこのコードを使用してください

private final void focusOnView(){
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                your_scrollview.scrollTo(0, your_EditBox.getBottom());
            }
        });
    }
于 2016-07-11T09:59:56.367 に答える
0

参照: http://developer.android.com/reference/android/widget/ListView.html#setSelectionFromTop(int , int)

  • 「int selectedLevel」は現在選択されているレベルを保持し、情報はLevelクラスに保持されます。
  • 「値」は、すべてのレベルを含むリストで、リストによって表示されます。

例:

    ListView lv = (ListView)findViewById(android.R.id.list);
    int i = 0;
    for (Level l : values) {
        i++;
        if (l.level == selectedLevel) {
            lv.setSelectionFromTop(i, 200);
            break;
        }
    }
于 2013-08-12T13:39:27.247 に答える
0

私の別の答えから取られたこのコードを使用してください

scrollViewSignup.post(new Runnable() {
    @Override
    public void run() {
        int scrollY = scrollViewSignup.getScrollY();
        scrollViewSignup.scrollTo(0, 0);
        final Rect rect = new Rect(0, 0, view.getWidth(), view.getHeight());
        view.requestRectangleOnScreen(rect, true);

        int new_scrollY = scrollViewSignup.getScrollY();
        scrollViewSignup.scrollTo(0, scrollY);
        scrollViewSignup.smoothScrollTo(0, new_scrollY);
    }
});

このコードはスムーズなスクロールを試み、システムの標準的な動作を使用して項目に配置します。システムにアイテムへのスムーズなスクロールをさせたくない場合は、単純にSmoothScrollToを scrollToに変更できます。または、以下のコードのみを使用できます。

scrollViewSignup.post(new Runnable() {
    @Override
    public void run() {
        scrollViewSignup.scrollTo(0, 0);
        final Rect rect = new Rect(0, 0, view.getWidth(), view.getHeight());
        view.requestRectangleOnScreen(rect, true);
    }
});

試した後、または必要に応じて、目的のコード ブロックを使用します。

于 2019-09-26T12:39:44.597 に答える