我有一個ListView,它在操作欄和EditText上方。 見圖片: 獲取軟鍵盤顯示後的列表視圖項目位置
列表視圖中的項目根據其內容具有隨機的高度。
當點擊列表查看項目時,我需要關注EditText並打開軟鍵盤,同時我希望被點擊的人位於列表視圖的頂部,例如,如果我單擊item2,我想查看:
對於把點擊的項目列表視圖頂部,單擊某個項目時,我將它的位置獲得點擊的項目視圖,並調用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"
和windowSoftInputMode
的adjustResize
。
編輯:
也試過int firstVisiblePos = commentsListView.getFirstVisiblePosition(); int offset = firstVisiblePos - clickedPosition; commentsListView.smoothScrollByOffset(offset);
,但仍然沒有幫助。
對不起,這對我不起作用,當我試圖調用'smoothScrollToPosition(0)'時,它甚至不能滾動到列表視圖的第一項。 –