吐司重力产生不正确的垂直位置

时间:2016-06-13 22:30:23

标签: android toast

当我这样做时:

toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);

...吐司的上边缘距离屏幕顶部大约24个像素。吐司的背景恰好高约48像素。巧合?这里发生了什么?

(屏幕的顶部并不是我想要的地方。我只是把它放在那里试图找出垂直位置错误的原因。)

1 个答案:

答案 0 :(得分:1)

我找到了解释,虽然不是解决方案。看起来吐司位置没有考虑导航和状态栏以全屏模式隐藏,并将其自身定位为可见。

我的活动在onCreateonWindowFocusChanged设置了全屏模式。我尝试将吐司发布到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);
        }
    });
}