我正在尝试创建类似于Facebook聊天头的测试应用程序。在这里我使用窗口管理器动态添加和更新视图到屏幕,当用户选择图像时,它应显示包含一些内容的扩展列表。要显示我正在使用弹出窗口类的内容。
当用户选择视图时,我将显示特定位置的展开视图。假设当前视图位置是x = 736& y = 1124.如果用户想要查看内容,那么用户将选择视图,然后我从特定位置重新绘制所有视图,假设x = 700且y = 50,这样我就可以在屏幕上显示空间以显示弹出窗口。 / p>
问题: - 当我使用windowManager.updateViewLayout方法更新视图时,它会更新屏幕上的视图但view.getLocationOnScreen(location)仍会返回旧坐标,因为我的弹出窗口未正确绘制,因为弹出窗口窗口没有足够的空间。
例如: - 我当前的查看位置是x = 736& y = 1124并且一旦用户选择了视图,我将所有视图重新划分到新位置x = 700和y = 50,但是当我执行view.getLocationOnScreen(location)时,我仍然得到x = 736& y = 1124.这是不正确的。
解决方案: - requestLayout()强制在计算getLocationOnScreen之前重新绘制屏幕。
expandedParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
expandedParams.gravity = Gravity.TOP | Gravity.LEFT;
expandedParams.x = 700;
expandedParams.y = 50;
for (int i = chatHeadsImageview.size() - 1; i >= 0; i--) {
//getting width of my view
expandedParams.x = expandedParams.x
- chatHeadsImageview.get(i).getWidth();
//Storing current update x location
chatHeadsImageview.get(i).setxOpenChatHeadCordinate(
expandedParams.x);
//Storing current update y location
chatHeadsImageview.get(i).setyOpenChatHeadCordinate(
expandedParams.y);
//updating the view
windowManager.updateViewLayout(chatHeadsImageview.get(i),
expandedParams);
}
int[] location = new int[2];
chatHeadsImageview.get(chatHeadsImageview.size()-1).getLocationOnScreen(location);
System.out.println("getLocationOnScreen x ==> "+location[0]);
System.out.println("getLocationOnScreen y ==> "+location[1]);
如果需要更多信息,请与我们联系。