我想根据用户点击的位置滚动到特定项目。列表视图的所有项目都具有不同的高度。请看下面的图片。
因此,如果用户点击列表项1,我们假设,所以它的底部应该滚动到软键盘的顶部。
项目和键盘的高度各不相同。我尝试了getTop
,getHeight
,getMeasuredHeight
但到目前为止还没有任何工作。
答案 0 :(得分:1)
要点是找到点击的用户界面与键盘顶部之间的距离。
这是距离公式。您可以使用此功能实现功能。你需要
假设以下是您正在点击的ListView
int[] loc = new int[2];
lvItem_button.getLocationOnScreen(loc);
在布局底部放置一个布局,在AdjustPan
中将您的活动标记为Android Manifest
,现在它将始终位于键盘的顶部,此时键盘将会打开。
以相同的方式获取它的坐标。
int[] cords= new int[2];
keyboard_top_layout.getLocationOnScreen(cords);
double distance = Math.sqrt(Math.pow((cords[0] - loc[0]), 2) + Math.pow((cords[1] - loc[1]), 2));
distance -= heightOfItem; //subtract height because we want to align bottom of item to top of keyboard
distance = Math.ceil(distance);
lvItem.smoothScrollBy((int) -distance, 500); //-distance because X is increasing at bottom and decreasing at top. 500 is delay in scrolling. so it's smooth scroll
全部完成:)