标签: android-immersive

如何在方向改变时保留沉浸模式?

目前在 Activity 类中使​​用此代码块来进入粘性沉浸模式:

override fun onWindowFocusChanged(hasFocus: Boolean) {
    super.onWindowFocusChanged(hasFocus)

    if (hasFocus && android.os.Build.VERSION.SDK_INT > 15) {
        var flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                View.SYSTEM_UI_FLAG_FULLSCREEN
        flags = if (android.os.Build.VERSION.SDK_INT < 19) flags
            else flags or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
        window.decorView.systemUiVisibility = flags
    }
}
Run Code Online (Sandbox Code Playgroud)

当方向切换时,状态栏会回来(甚至不是半透明的)并保持不变,直到拖动,然后再次消失。我真的不明白这种行为的原因,我该如何解决它?

先感谢您。

android screen-orientation kotlin android-immersive

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

单击弹出菜单时,为什么导航栏出现在全屏应用程序中

我有一个全屏应用程序:

MainActivity.java:

public class MainActivity extends AppCompatActivity {

@TargetApi(Build.VERSION_CODES.KITKAT)
private void removeControlBar(){
    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);
}
@Override
public void onResume(){
    super.onResume();
    removeControlBar();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public …
Run Code Online (Sandbox Code Playgroud)

android fullscreen navigationbar android-immersive

5
推荐指数
1
解决办法
3586
查看次数

为Android全屏制作Xamarin表格

无论如何,我的Android上的Xamarin Forms应用程序是全屏还是沉浸式模式?

我尝试了以下操作,状态栏上的所有控件都被隐藏,但状态栏本身仍然显示.请帮忙

var newUiOptions = (int)SystemUiFlags.LayoutStable;

newUiOptions |= (int)SystemUiFlags.LayoutHideNavigation;
newUiOptions |= (int)SystemUiFlags.LayoutFullscreen;
newUiOptions |= (int)SystemUiFlags.HideNavigation;
newUiOptions |= (int)SystemUiFlags.Fullscreen;
newUiOptions |= (int)SystemUiFlags.Immersive;
//newUiOptions |= (int)SystemUiFlags.ImmersiveSticky;

decorView.SystemUiVisibility = (StatusBarVisibility)newUiOptions;
Run Code Online (Sandbox Code Playgroud)

导航栏是隐藏的,但不是状态栏.

android xamarin.android xamarin xamarin.forms android-immersive

5
推荐指数
1
解决办法
8052
查看次数

键盘打开时导航栏变得透明

它看起来是这样的。 透明导航栏

这是详细信息。我有活动,没有背景。但这不是问题。在主题或代码中设置背景可绘制或颜色都没有解决问题。

Activity具有软输入模式adjustPan|stateAlwaysHidden

我还在代码中为活动的装饰视图设置了这些标志

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
Run Code Online (Sandbox Code Playgroud)

我尝试像这样在主题中明确设置导航栏的颜色

<item name="android:navigationBarColor" tools:targetApi="lollipop">@color/chat_bg</item>
<item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="lollipop">true</item>
Run Code Online (Sandbox Code Playgroud)

但没有成功(

我只能在我的 LG Nexus 5X 上重现它。在其他设备上,我尝试过导航栏显示充满颜色。

android landscape navigationbar android-softkeyboard android-immersive

5
推荐指数
1
解决办法
1778
查看次数

在android中使用沉浸式全屏模式时的空白区域

我使用下面的代码来使用沉浸式全屏模式:

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 // hide nav bar
            | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
            | View.SYSTEM_UI_FLAG_IMMERSIVE);
Run Code Online (Sandbox Code Playgroud)

但是当我运行我的应用程序时,会显示一个空格而不是通知和底栏.

我想我的XML文件中有错误.这是我的XML文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#303030"
    tools:context="programsimple.game.FullscreenActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:background="#eeeeee">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/background"/>

        <Button
            android:layout_width="110dp"
            android:layout_height="70dp"
            android:background="@drawable/button_shape"
            android:layout_centerVertical="true"
            android:id="@+id/btnStartGame"
            android:layout_centerHorizontal="true"
            android:text="????"
            android:textSize="25sp"
            android:textColor="#97d2ff"/>

    </RelativeLayout>

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

有没有错?

更新:我用KitKat测试.

android fullscreen android-immersive

5
推荐指数
1
解决办法
2381
查看次数

如何为 Native Activity NDK 应用程序启用全屏沉浸模式?

阅读https://developer.android.com/training/system-ui/immersive.html上的文档,我似乎找不到任何有关如何在 Native Activity NDK 应用程序中设置全屏沉浸模式的信息(不使用 JNI ),因为全屏沉浸模式似乎只能从 Java 切换。

由于无法从清单中设置(在清单中设置Android沉浸式全屏模式),有没有办法通过EGL请求它?

似乎启用全屏沉浸模式的唯一方法是在通过 EGL 请求表面之前通过 JNI 调用 setSystemUiVisibility ?

java-native-interface android android-ndk native-activity android-immersive

5
推荐指数
1
解决办法
1540
查看次数

Android - 切换沉浸模式会打开操作栏覆盖模式

我正在尝试在我的 Android 应用程序中实现沉浸式(全屏)模式,但遇到了无法解决的问题。

我正在遵循Android Docs 中的沉浸式模式指南和示例应用程序,它大部分都可以工作,但是当退出沉浸式模式时,我的应用程序上的应用程序栏(操作栏)仍处于叠加模式(它不会以叠加模式启动当活动启动时),从而掩盖了我的活动的一些内容,并且我无法弄清楚setSystemUiVisibility()退出沉浸模式时需要提供的 UI 标志和按位运算符的组合,以使其将我的应用程序恢复到初始状态(使用不在叠加模式下的应用栏)。

我有一个演示应用程序显示问题,相关代码位如下:

使用内置工具栏/应用程序栏/操作栏进行样式设置,尽管我尝试使用自己的自定义工具栏并将其设置为支持操作栏,但结果相同。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
Run Code Online (Sandbox Code Playgroud)

单击活动中的“切换沉浸式模式”按钮运行以下方法,该方法遵循沉浸式模式的 Android 指南(请参阅上面的链接)。

private void toggleImmersiveMode() {
    View decorView = getWindow().getDecorView();

    if (mIsImmersiveEnabled) {
        // Immersive Mode is on, turn it off.
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
              | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
              | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    } else {
        // Immersive Mode is off, turn it on.
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_IMMERSIVE
                // Set the content to appear under the system bars so that the
                // content doesn't resize when the system …
Run Code Online (Sandbox Code Playgroud)

android android-immersive

5
推荐指数
0
解决办法
557
查看次数

如何修复:打开弹出菜单时导航栏图标仍然显示(全屏 - 沉浸式粘性)

我正在尝试实现一个全屏应用程序,其中用户无法访问状态栏和导航栏

最好我希望它们被完全删除,但从我读到的情况来看,这是不可能的,除非你root设备

所以我的问题基本上是:当我显示弹出菜单时,如何隐藏导航栏图标

前

后

到目前为止,我已经尝试过:

  • hideNavigation()显示弹出菜单之前和之后调用
  • 呼入hideNavigation()onCreate(), onResume() & onWindowFocusChanged()
  • 请求焦点到另一个视图
  • 尝试从下拉列表中清除焦点(尝试失败,没有真正找到方法来做到这一点)
  • 更改图标颜色,“假装”它会被隐藏(尝试失败,没有真正找到方法来做到这一点)
  • hideNavigation()结合使用(Handler失败的尝试,可能是我没做对)
  • 尝试配置一些 COSU/KIOSK 模式选项(也许有某种方法可以完全禁用整个导航栏?我还没有找到隐藏后退按钮的方法

活动


    class PinCodeActivity, HasTitleBar {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_pin_code)
            initTitleBarWith(this)
            hideNavigation()
        }

        override fun onResume() {
            super.onResume()
            hideNavigation()
        }

        fun hideNavigation() {
            window.decorView.apply {
                systemUiVisibility = FLAGS
            }
        }

        override fun onWindowFocusChanged(hasFocus: Boolean) {
            super.onWindowFocusChanged(hasFocus)
            hideNavigation()
        }
    }

const val FLAGS = (View.SYSTEM_UI_FLAG_LOW_PROFILE or …
Run Code Online (Sandbox Code Playgroud)

android android-fullscreen android-immersive android-navigation-bar

5
推荐指数
1
解决办法
2570
查看次数

在 Android、Xamarin.forms 上的整个应用程序中保持沉浸式模式

我想使用 Xamarin.forms 在 Android 上的应用程序中保持沉浸式模式。我读过一些博客和帖子。这个有效,但只有当我按下输入文本框或滚动屏幕时才有效。我想避免这种情况。这个问题争论了我的担忧,但我不明白解决方案。也许它已经过时了。我的 Android 设备是7.1,这是我的.Android MainActivity, ,上的代码void OnCreatevoid OnCreate

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity{
    protected override void OnCreate(Bundle savedInstanceState){
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;
        base.OnCreate(savedInstanceState);
        LoadApplication(new App());

        ImmersiveMode();
    }

    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults){
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    public void ImmersiveMode() {
        int uiOptions = (int)(Forms.Context as Activity).Window.DecorView.SystemUiVisibility;
        uiOptions |= (int)SystemUiFlags.Fullscreen;
        uiOptions |= (int)SystemUiFlags.HideNavigation;
        uiOptions |= …
Run Code Online (Sandbox Code Playgroud)

c# android xamarin xamarin.forms android-immersive

3
推荐指数
1
解决办法
1181
查看次数

Flutter 粘性沉浸式无法正确处理状态栏

我在 Android 12 上使用 flutter 2.5.3 时会发生这种情况

使用时

SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
Run Code Online (Sandbox Code Playgroud)

顶部状态栏被隐藏,但它所在的空间完全是黑色的并且无法使用。 在此输入图像描述

这是我正在使用的代码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key); …
Run Code Online (Sandbox Code Playgroud)

android android-immersive flutter android-12

3
推荐指数
1
解决办法
1815
查看次数