我正在尝试自定义AutoCompleteTextView
的行为,但我遇到了一些困难。我的AutoCompleteTextView
子类是一个多行编辑文本,我希望能够垂直定位下拉列表(实际上是ListPopupWindow
),以便跟随用户的光标。
我认为如果我可以计算锚点视图顶部和当前行位置之间的差异,我可以相应地设置偏移量,但是我必须在此过程中做错事,因为下拉列表不会发生我想去的地方。有人能指出我在这段代码中做错了什么吗?
@Override
public void showDropDown() {
// Get the screen position of the cursor and set the vertical offset accordingly.
int[] screenPoint = new int[2];
getLocationOnScreen(screenPoint);
final Rect displayFrame = new Rect();
getWindowVisibleDisplayFrame(displayFrame);
int pos = getSelectionStart();
Layout layout = getLayout();
int line = layout.getLineForOffset(pos);
int lineTop = layout.getLineTop(Math.max(0,line - 1));
int lineBottom = layout.getLineBottom(line);
int availableSpaceAboveField = screenPoint[1] + lineTop - displayFrame.top;
int availableSpaceBelowField = displayFrame.bottom - screenPoint[1] - lineBottom;
int verticalOffset = -lineTop;
setDropDownVerticalOffset(verticalOffset);
super.showDropDown();
}