当我这样做时:

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


...烤面包的顶部边缘距屏幕顶部约24像素。烤面包的背景恰好约为48像素高。巧合?这里发生了什么?

(屏幕顶部并不是我真正想要的位置。我仅将其放在此处以试图弄清楚垂直位置为什么是错误的。)

最佳答案

我找到了解释,尽管不是解决方案。烤面包机的位置似乎没有考虑到导航和状态栏在全屏模式下是隐藏的,而是将自身定位为可见。

我的活动在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);
        }
    });
}

关于android - toast 重力产生错误的垂直位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37800156/

10-11 22:26
查看更多