底部的Android关闭全屏视图被调离屏幕

底部的Android关闭全屏视图被调离屏幕,android,fullscreen,toolbar,Android,Fullscreen,Toolbar,我有一个屏幕,底部工具栏使用以下样式对齐 <style name="BottomToolbar" > <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:background">@color/WHI

我有一个屏幕,底部工具栏使用以下样式对齐

<style name="BottomToolbar" >
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:background">@color/WHITE</item>
    <item name="android:layout_gravity">bottom</item>
    <item name="android:layout_alignParentBottom">true</item>
    <item name="android:minHeight">?attr/actionBarSize</item>
</style>
我使用以下代码退出全屏

getActivity().getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
编辑2-视图未从底部推出,其高度太小

看起来底部视图没有从屏幕底部移出,它的高度缩小了,并且比应该的要小

底部视图是一个线性布局,其高度设置为“包裹内容”,但由于其长度小于其内容,因此其内容的底部被截断,因此高度计算不正确

编辑3-设备上出现的问题


进一步调查显示,该问题仅出现在没有屏幕导航栏的设备上。例如,问题出现在我的三星10英寸平板电脑上,而不是Nexus 5x上。

如果我删除以下标志,问题似乎已得到解决

View.SYSTEM_UI_FLAG_LAYOUT_STABLE
此标志的Google文档是“当使用其他布局标志时,我们希望能够稳定地查看提供给fitSystemWindows(Rect)的内容插入。”

医生说 “您可能还需要使用SYSTEM_UI_FLAG_LAYOUT_STABLE来帮助您的应用程序保持稳定的布局。”()和
“最好包含其他系统UI标志(如系统UI标志布局隐藏导航和系统UI标志布局稳定),以防止在系统栏隐藏和显示时内容大小发生变化。”()

我的问题

  • 我从全屏活动退出到黑暗行动主题活动
  • 我按下软键盘上的“后退”按钮返回全屏活动
  • 底部的景色突然被切断了

    通过覆盖
    onBackPressed()
    方法并重新启动我的活动来解决此问题:

    @Override
    public void onBackPressed() {
        startActivity(new Intent(getApplicationContext(), YourActivityHere.class));
    }
    

    这应该会重新创建活动。如果你可以申请,这是一个很好的黑客行为。

    我也遇到了同样的问题。我也在谷歌上搜索过,但没有找到解决方案。 我在onBackPressed()上应用了100毫秒延迟,因为我使用了SetSystemMivibility,但这需要时间

    问题-Fragment在SetSystemMissibility之前调用,因为SetSystemMissibility需要时间,所以我们需要设置回按延迟

        public static void hideToolbarFoProfile(Context mContext) {
            Activity mActivity = (Activity) mContext;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window w = Objects.requireNonNull(mActivity).getWindow();
                w.getDecorView().setSystemUiVisibility(
                        View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    
            }
    
            ((MainActivity) Objects.requireNonNull(mActivity)).toolbar.setVisibility(View.GONE);
    
        }
    
        public static void showToolbarFoProfile(Context mContext) {
            Activity mActivity = (Activity) mContext;
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window w = Objects.requireNonNull(mActivity).getWindow();
                w.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
    
    
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    w.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                }
            }
    
            ((MainActivity) Objects.requireNonNull(mActivity)).toolbar.setVisibility(View.VISIBLE);
    
        }
    
    new Handler().postDelayed(() -> {
                    Objects.requireNonNull(getActivity()).onBackPressed();
                }, 100);
    

    你能添加一些代码(切换到全屏模式并返回)吗?我已经用我用来进入/退出全屏的代码更新了原始帖子
        public static void hideToolbarFoProfile(Context mContext) {
            Activity mActivity = (Activity) mContext;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window w = Objects.requireNonNull(mActivity).getWindow();
                w.getDecorView().setSystemUiVisibility(
                        View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    
            }
    
            ((MainActivity) Objects.requireNonNull(mActivity)).toolbar.setVisibility(View.GONE);
    
        }
    
        public static void showToolbarFoProfile(Context mContext) {
            Activity mActivity = (Activity) mContext;
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window w = Objects.requireNonNull(mActivity).getWindow();
                w.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
    
    
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    w.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                }
            }
    
            ((MainActivity) Objects.requireNonNull(mActivity)).toolbar.setVisibility(View.VISIBLE);
    
        }
    
    new Handler().postDelayed(() -> {
                    Objects.requireNonNull(getActivity()).onBackPressed();
                }, 100);