标签: android-immersive

沉浸式模式显示空白区域

我正在尝试实现全屏模式,但对于Android 4.4及更高版本,它会在那里显示一个空白区域:

沉浸式模式之前(全屏)

在此输入图像描述

AFTERtoggleFullScreen(假);

在此输入图像描述

如你所见,它不会删除它.这是我用来切换它的代码:

public void toggleFullscreen(boolean fs) {
        if (Build.VERSION.SDK_INT >= 11) {
            // The UI options currently enabled are represented by a bitfield.
            // getSystemUiVisibility() gives us that bitfield.
            int uiOptions = this.getWindow().getDecorView().getSystemUiVisibility();
            int newUiOptions = uiOptions;
            boolean isImmersiveModeEnabled =
                    ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);
            if (isImmersiveModeEnabled) {
                Log.i(getPackageName(), "Turning immersive mode mode off. ");
            } else {
                Log.i(getPackageName(), "Turning immersive mode mode on.");
            }

            // Navigation bar …
Run Code Online (Sandbox Code Playgroud)

android android-immersive

22
推荐指数
2
解决办法
4753
查看次数

在软键盘出现时出现状态栏但在沉浸模式下软键盘消失时不会隐藏

最初我使用以下代码将我的Activity设置为沉浸模式:

View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    | View.SYSTEM_UI_FLAG_FULLSCREEN
    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
Run Code Online (Sandbox Code Playgroud)

一切正常,直到用户点击EditText并出现软键盘.它会导致状态栏粘在顶部,即使在软键盘消失后也不会再次隐藏.奇怪的是,我只在LG /三星手机上遇到过这个问题,索尼手机对此没有任何问题.有人对此有任何想法吗?

android android-softkeyboard android-edittext android-statusbar android-immersive

13
推荐指数
1
解决办法
3783
查看次数

显示DialogFragment时保持沉浸式模式

我有一个使用Fragments制作的Android应用程序

我使用以下代码隐藏屏幕顶部和底部的条形图.

 @Override
protected void onResume() {
    super.onResume();
    isInBackground = false;

    if(null == getFragmentManager().findFragmentById(R.id.content_container))
    {
        getFragmentManager().beginTransaction().add(R.id.content_container,new PresenterFragment(), PresenterFragment.FRAG_TAG).commit();
    }

    if(Build.VERSION.SDK_INT >=19)
    {
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
                | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        decorView.setSystemUiVisibility(uiOptions);
        decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                View decorView = getWindow().getDecorView();
                int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
                        | View.SYSTEM_UI_FLAG_FULLSCREEN // hide …
Run Code Online (Sandbox Code Playgroud)

keyboard android android-dialogfragment android-immersive

8
推荐指数
2
解决办法
8286
查看次数

Android Snackbar隐藏在系统UI背后

我有一个全屏活动,它使用以下两个功能隐藏/显示系统UI:

// This snippet hides the system bars.
public static void hideSystemUI(View view) {
    // Set the IMMERSIVE flag.
    // Set the content to appear under the system bars so that the content
    // doesn't resize when the system bars hide and show.
    view.setSystemUiVisibility(
        View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
            | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
            | View.SYSTEM_UI_FLAG_IMMERSIVE);
}

// This snippet shows the system bars. It does this by removing all the flags
// …
Run Code Online (Sandbox Code Playgroud)

android snackbar android-immersive

8
推荐指数
0
解决办法
521
查看次数

更改活动时,Android Immersive模式会重置

我在使用沉浸式模式时遇到了问题.以下是我对所有活动的代码:

 @Override
 public void onWindowFocusChanged(boolean hasFocus) {
     super.onWindowFocusChanged(hasFocus);
     if (hasFocus) {
         getWindow().getDecorView().setSystemUiVisibility(
             View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                 | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                 | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                 | View.SYSTEM_UI_FLAG_FULLSCREEN
                 | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
         );
     }
 }
Run Code Online (Sandbox Code Playgroud)

navigationBarstatusBar是不可见的,这是件好事.

问题是,每次我去另一个活动,navigationBar出现,然后消失.我希望那navigationBar不是那样的.

android android-activity android-immersive

6
推荐指数
2
解决办法
3517
查看次数

在沉浸式粘滞模式下弹出窗口

当在Android应用程序中使用弹出窗口时,沉浸式粘滞模式似乎不起作用.在弹出窗口期间,状态和导航栏会成为焦点.虽然我能够重置警报对话框的系统UI标志以避免此行为,但我不知道如何为弹出窗口执行此操作.有人可以帮忙吗?

以下是我创建弹出窗口的方法:

LayoutInflater layoutInflater = (LayoutInflater) getActivity().getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View popUpView = layoutInflater.inflate(R.layout.popup_image_selector, null);

 DisplayMetrics displayMetrics = getActivity().getApplicationContext().getResources().getDisplayMetrics();
    int width = displayMetrics.widthPixels;
    int height = displayMetrics.heightPixels;

   final PopupWindow popUp = new PopupWindow(popUpView,(int) (width*0.66), (int)(height*.20));
    popUp.setFocusable(true);
    popUp.setOutsideTouchable(true);

popUp.setContentView(popUpView);
    popUp.showAtLocation(imageContent, Gravity.BOTTOM, 0, (int)(height*.20));
Run Code Online (Sandbox Code Playgroud)

我在哪里可以设置系统UI标志,因为我不能够访问getWindow().setFlags或getWindow().getDecorView的弹出窗口.

感谢任何帮助!

谢谢!

popupwindow android-immersive

6
推荐指数
0
解决办法
529
查看次数

android:fitsSystemWindows ="true"在使用DrawerLayout和沉浸式模式时存在问题

试图用身临其境的方式,使用时碰到的问题android:fitsSystemWindows="true"DrawerLayout.我必须将此设置为true,以便将DrawerLayout工具栏约束到系统栏.

问题是,我有一个Fragment将应用程序设置为沉浸式模式.这使得应用程序执行此操作: 全屏与系统栏

我所知道的是一个已知的问题android:fitsSystemWindows="true".我将其设置为false,沉浸式模式运行良好,但工具栏和布局的其余部分不再受制于系统栏.我尝试在运行时设置值,布局的下半部分(也就是导航栏区域)由我的布局填充,但系统栏区域仍然显示: 带状态栏的全屏

这是我的代码:

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<include
    layout="@layout/app_bar_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/nav_header_main"
    app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

ClockFragment.java - 隐藏和显示

private void hideSystemUI() {
    if (Build.VERSION.SDK_INT >= 14) {
        getActivity().findViewById(R.id.drawer_layout).setFitsSystemWindows(false);
    }
    getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    if (Build.VERSION.SDK_INT >= 19) {
        mDecorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_IMMERSIVE);
    } else if (Build.VERSION.SDK_INT >= …
Run Code Online (Sandbox Code Playgroud)

android android-windowmanager navigation-drawer android-immersive

6
推荐指数
1
解决办法
5633
查看次数

如何在 Spinner 中保持沉浸模式?

我使用沉浸式粘性模式来隐藏导航栏和操作栏:

@TargetApi(19)
private void setImmersiveMode() {
    if (Build.VERSION.SDK_INT >= 19) {
        View decorView = getWindow().getDecorView();
        int uiOptions = getImmersiveUiOptions(decorView);
        decorView.setSystemUiVisibility(uiOptions);
        ActionBar actionBar = getActionBar();
        if (null!=actionBar) {
            actionBar.hide();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Spinner被触摸时,navigationBar被示出和沉浸式模式是禁用的。

此解决方案适用于对话框:

dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
dialog.show();
dialog.getWindow().getDecorView().setSystemUiVisibility(
context.getWindow().getDecorView().getSystemUiVisibility());
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
Run Code Online (Sandbox Code Playgroud)

但是Spinner没有show()我可以覆盖的方法。

触摸微调器时如何防止系统 UI 显示?

编辑:这个问题是关于保持导航栏隐藏(BackButton、HomeButton 和RecentTasksButton)。我已经在用FLAG_FULLSCREEN

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);   
Run Code Online (Sandbox Code Playgroud)

android android-spinner android-immersive

6
推荐指数
1
解决办法
1195
查看次数

Android VideoView-沉浸式-重叠控制器

我在我的应用上有一个videoview,我使用gogole作为参考来使视频播放器全屏显示:

https://developer.android.com/training/system-ui/immersive#java

我从上面的网站关注了instruccion,并且能够将视频播放器全屏显示,但是我的媒体控制器和设备控制器出现了一个奇怪的问题(它们过大),并且不知道如何解决任何想法。问题。

在此处输入图片说明

public class VideoPlayer extends AppCompatActivity {

    VideoView videoView;
    MediaController mediaController;
    private String TAG = VideoPlayer.class.getSimpleName();
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.video_player_activity);

        videoView = (VideoView) findViewById(R.id.videoView);
        mediaController = new MediaController(this);
        videoView.setVideoPath("android.resource://" + getPackageName() + "/" + R.raw.video1);
        mediaController.setAnchorView(videoView);
        videoView.setMediaController(mediaController);
        videoView.start(); 

    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
            hideSystemUI();
        }
    }

    private void hideSystemUI() { 
        View decorView = getWindow().getDecorView();
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            decorView.setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN …
Run Code Online (Sandbox Code Playgroud)

java android android-videoview android-immersive

6
推荐指数
1
解决办法
278
查看次数

Android全屏粘沉浸式模式-如何更改导航栏背景或图标颜色?

我按照Android 开发教程操作并获得了全屏粘性沉浸模式。这使得状态栏和导航栏隐藏,直到用户从底部向上或从顶部向下滑动,此时它们会出现并在不使用时慢慢淡出。

问题出在 Android 10(可能还有其他版本)上:屏幕底部的导航栏只是白色图标。没有透明的黑色背景。这使得使用浅色用户界面很难看清。

有没有办法改变导航栏的背景或图标颜色?特别是粘性的沉浸式导航栏,它会出现并消失(因为它太轻,无法与浅色 UI 一起使用)。

我尝试过以编程方式设置样式和颜色,但它们仅在非全屏模式下工作:

<!-- does not work -->
<item name="android:navigationBarColor">@android:color/white</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowLightNavigationBar">true</item>
Run Code Online (Sandbox Code Playgroud)

我也尝试过聆听,OnSystemUiVisibilityChangeListener这样我就可以在导航栏后面显示我自己的透明栏,但它不会触发粘性沉浸模式(如本 SO 帖子和视频中所述):

使用粘性沉浸模式检测系统用户界面何时可见

https://www.youtube.com/watch?v=cBi8fjv90E4&feature=youtu.be&t=6m56s

设置全屏的活动代码(kotlin):

protected fun isFullscreen() = defaultSharedPref.getBoolean(SharedPreferenceKey.IS_FULL_SCREEN, false)

private fun supportsFullscreenMode(): Boolean {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
}

override fun onWindowFocusChanged(hasFocus: Boolean) {
    super.onWindowFocusChanged(hasFocus)
    if (hasFocus && isFullscreen()) toggleFullScreenMode(true)
}

/**
 * "sticky immersive" full screen mode.
 * When user swipes from top/bottom edge, transparent status bar and navigation bar appear and …
Run Code Online (Sandbox Code Playgroud)

android fullscreen navigationbar android-immersive

6
推荐指数
0
解决办法
2384
查看次数