当我这样做时:
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
...吐司的上边缘距离屏幕顶部大约24个像素。吐司的背景恰好高约48像素。巧合?这里发生了什么?
(屏幕的顶部并不是我想要的地方。我只是把它放在那里试图找出垂直位置错误的原因。)
答案 0 :(得分:1)
我找到了解释,虽然不是解决方案。看起来吐司位置没有考虑导航和状态栏以全屏模式隐藏,并将其自身定位为可见。
我的活动在onCreate
和onWindowFocusChanged
设置了全屏模式。我尝试将吐司发布到onPostResume
的处理程序,尽可能晚地显示吐司,但它仍然表现得好像系统UI可见。
如果我遗漏了某些内容,这就是我设置全屏模式的方式:
@TargetApi(Build.VERSION_CODES.KITKAT)
private void enableFullScreenMode() {
int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
}
getWindow().getDecorView().setSystemUiVisibility(flags);
/* Calling setSystemUiVisibility directly works most of the time, but
* sometimes the navigation bar gets stuck, covering part of the UI.
* Posting it seems to prevent this. */
final int finalFlags = flags;
getWindow().getDecorView().post(new Runnable() {
@Override
public void run() {
getWindow().getDecorView().setSystemUiVisibility(finalFlags);
}
});
}