2015-06-12 60 views
0

我有一個ListView,它在操作欄和EditText上方。 見圖片: The original looking獲取軟鍵盤顯示後的列表視圖項目位置

列表視圖中的項目根據其內容具有隨機的高度。

當點擊列表查看項目時,我需要關注EditText並打開軟鍵盤,同時我希望被點擊的人位於列表視圖的頂部,例如,如果我單擊item2,我想查看:

After clicking an item

對於把點擊的項目列表視圖頂部,單擊某個項目時,我將它的位置獲得點擊的項目視圖,並調用view.getLocationOnScreen(locations)得到它的y位置,並使用此Y減ActionBar的身高,然後我得到滾動的距離,最後打電話listview.smoothScrollBy(distance, 100);

這種方法在顯示軟鍵盤後工作良好,因爲列表視圖的高度將被固定;但第一次點擊列表視圖項時效果不佳,因爲在這一點上,當軟鍵盤佔用一些空格時,列表視圖的高度將會改變,這導致當我使用view.getLocationOnScreen(locations)時,它返回舊的位置查看,表示前面軟鍵盤顯示的位置,我也試過用view.postDelayed(new Runnable() {//Gets view position here!}, 1000);,但得到了相同的舊的的位置。

所以問題應該是如何獲得鍵盤顯示後的最新位置?

我使用ListView的android:transcriptMode="normal"windowSoftInputModeadjustResize

編輯:

也試過int firstVisiblePos = commentsListView.getFirstVisiblePosition(); int offset = firstVisiblePos - clickedPosition; commentsListView.smoothScrollByOffset(offset);,但仍然沒有幫助。

回答

0

您不必使用屏幕高度來滾動listView。您可以使用ListView的smoothScrollToPosition(int position)滾動到列表中的特定位置。

+0

對不起,這對我不起作用,當我試圖調用'smoothScrollToPosition(0)'時,它甚至不能滾動到列表視圖的第一項。 –