目前在 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)
当方向切换时,状态栏会回来(甚至不是半透明的)并保持不变,直到拖动,然后再次消失。我真的不明白这种行为的原因,我该如何解决它?
先感谢您。
我有一个全屏应用程序:
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上的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
这是详细信息。我有活动,没有背景。但这不是问题。在主题或代码中设置背景可绘制或颜色都没有解决问题。
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
我使用下面的代码来使用沉浸式全屏模式:
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测试.
阅读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
我正在尝试在我的 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) 我正在尝试实现一个全屏应用程序,其中用户无法访问状态栏和导航栏。
最好我希望它们被完全删除,但从我读到的情况来看,这是不可能的,除非你root设备
所以我的问题基本上是:当我显示弹出菜单时,如何隐藏导航栏图标?
到目前为止,我已经尝试过:
hideNavigation()
显示弹出菜单之前和之后调用hideNavigation()
onCreate(), onResume() & onWindowFocusChanged()
hideNavigation()
结合使用(Handler
失败的尝试,可能是我没做对)
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
我想使用 Xamarin.forms 在 Android 上的应用程序中保持沉浸式模式。我读过一些博客和帖子。这个有效,但只有当我按下输入文本框或滚动屏幕时才有效。我想避免这种情况。这个问题争论了我的担忧,但我不明白解决方案。也许它已经过时了。我的 Android 设备是7.1,这是我的.Android
MainActivity
, ,上的代码void OnCreate
:void 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) 我在 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 ×10
fullscreen ×2
xamarin ×2
android-12 ×1
android-ndk ×1
c# ×1
flutter ×1
kotlin ×1
landscape ×1