質問: レイアウト 「GridView」 | 列1 | 列2 | 列3 | | --- | --- | --- | | 1-1 | 1-2 | 1-3 | | 2-1 | 2-2 | 2-3 | | 3-1 | 3-2 | 3-3 | | 4-1 | 4-2 | 4-3 | | 5-1 | 5-2 | 5-3 | | 6-1 | 6-2 | 6-3 | 「ボタン」 ボタン1, ボタン2, ・・・ボタン9 上記のようにgridViewの下にボタンがあるレイアウトです。 ボタン1を押したら、列1の1-1が画面上の一番上になるようになり、※想定どおり動きます。 ボタン2,3,4・・・を押したら同じように動作させたいです。※スクロールはするももの画面の一番下または中間になります。 ソースコードは以下の処理を行っています。 gridView.smoothScrollToPosition(int position) positionが0の場合は動きますが、9の場合は画面上には見えるが、下に位置します。 指定したpositionが一番上に来るようにするメソッドなどあるでしょうか? よろしくおねがいします。
回答: smoothScrollToPositionはアイテムが表示された段階で終了したかと思いますので、smoothScrollToPositionFromTopを使ってみてください。 smoothScroll関連は古いOSではバグがあったので一応そこもご注意を。 それと、そもそもListView系のスクロールは最後のアイテムが表示されるまでしかスクロールできないのですがそこは大丈夫でしょうか? 絶対最上部にしたいというのであれば、ListViewのようにfooterを差しこめるようにする等の独自のGridViewを用意し、余分なスクロール分のフッターを差しこむなりするのが簡単かと。 clipToPaddingをfalseにし、padding(bottom)を追加する方法もありますが、質問のような場合ですとpadding部分がスクロールを受け付けなかったりした事があるのでその範囲がでかそうなのと、smoothScrollByでスクロール量を余計に計算する必要になるかと思います。