不同的Gravity值如何影响Android中的PopupWindow.showAtLocation()?
我在PopupWindows showAtLocation和Gravity上找不到好的文档.
Bae*_*Bae 67
在黑客攻击几个小时后尝试使用一些黑魔法计算中心并尝试使用Gravity.TOP对齐视图我发现了一个使用Gravity.CENTER的帖子.我在这里收集我的发现,希望能为别人带来一些痛苦.
popupWindow.showAtLocation(anyViewOnlyNeededForWindowToken, Gravity.CENTER, 0, 0);
Run Code Online (Sandbox Code Playgroud)
窗口令牌只需要视图,它对位置没有其他影响.
重力告诉布局管理器在哪里启动坐标系以及如何处理这些坐标.我找不到文档,但黑客向我显示:
Sur*_*gch 11
你可以改变的严重性PopupWindow
,通过调整Gravity.CENTER
在showAtLocation
方法:
popupWindow.showAtLocation(anyView, Gravity.CENTER, 0, 0);
Run Code Online (Sandbox Code Playgroud)
下图显示了效果:
Gravity.CENTER
Gravity.TOP
Gravity.BOTTOM
Gravity.LEFT
Gravity.RIGHT
Gravity.TOP | Gravity.LEFT
Gravity.TOP | Gravity.RIGHT
Gravity.BOTTOM | Gravity.LEFT
Gravity.BOTTOM | Gravity.RIGHT
您可以通过更改(x,y)
偏移来进一步定位它
popupWindow.showAtLocation(anyView, gravity, x, y);
Run Code Online (Sandbox Code Playgroud)
例如
popupWindow.showAtLocation(anyView, Gravity.BOTTOM, 0, 300);
Run Code Online (Sandbox Code Playgroud)
以下是上述示例的代码.请参阅如何创建一个简单的Android弹出窗口以获得更多基本帮助.
int gravity = Gravity.CENTER;
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = inflater.inflate(R.layout.popup_window, null);
int width = LinearLayout.LayoutParams.WRAP_CONTENT;
int height = LinearLayout.LayoutParams.WRAP_CONTENT;
boolean focusable = true;
final PopupWindow popupWindow = new PopupWindow(popupView, width, height, focusable);
popupView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
popupWindow.dismiss();
return true;
}
});
popupWindow.showAtLocation(anyView, gravity, 0, 0);
Run Code Online (Sandbox Code Playgroud)
showAsDropDown
,如果你想弹出锚定到一个视图. 归档时间: |
|
查看次数: |
25625 次 |
最近记录: |