Android - Enable fullscreen mode
发布日期:2021-05-06 23:02:44 浏览次数:21 分类:精选文章

本文共 5316 字,大约阅读时间需要 17 分钟。

Android 全屏模式指南

全屏模式是Android开发中一个重要的主题,特别是在设计沉浸式用户体验(UX)时尤为重要。全屏模式可以帮助开发者最大化应用程序在屏幕上的显示面积,同时确保用户不会误操作退出应用程序。以下将详细介绍Android全屏模式的不同选项,以及如何在应用程序中实现这些模式。

全屏模式的重要性

全屏模式的主要目的是为了提供更好的用户体验,例如:

  • 视频播放
  • 游戏
  • 图像库浏览
  • 文档查看(如电子书或PPT)
  • 现场展示

全屏模式可以让用户更深入地与内容互动,同时保护用户不至于误操作退出应用程序。

全屏模式的选项

Android提供了三种全屏模式:Lean Back(靠后)、Immersive(沉浸式)和Sticky Immersive(粘性沉浸式)。以下将分别介绍这三种模式的特点和使用方法。

1. Lean Back(靠后)模式

特点

  • 适用于用户不会频繁与屏幕互动的场景,例如视频播放或图片浏览。
  • 用户可以通过点击屏幕任何位置来显示系统栏(如导航栏和状态栏)。

使用方法

View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
);

2. Immersive(沉浸式)模式

特点

  • 适用于用户会频繁与屏幕互动的场景,例如游戏或图像浏览。
  • 用户需要从屏幕的边缘进行滑动操作才能显示系统栏,这样可以减少误操作的可能性。

使用方法

View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
);

3. Sticky Immersive(粘性沉浸式)模式

特点

  • 在普通的沉浸式模式下,用户从屏幕边缘滑动会自动显示系统栏。
  • 在粘性沉浸式模式下,如果用户从屏幕边缘滑动,系统栏会以半透明的形式显示,并且触摸事件会被传递给应用程序,允许应用程序根据需要响应。

使用方法

View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
);

启用全屏模式

无论选择哪种全屏模式,开发者都需要调用setSystemUiVisibility()方法,并传递相应的标志位。以下是通用的代码示例:

View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_HIDE_NAVIGATION
| View.SYSTEM_UI_FULLSCREEN
);

其他注意事项

  • 布局调整:为了防止系统栏显示和隐藏导致布局错乱,开发者应在布局中设置SYSTEM_UI_FLAG_LAYOUT_STABLESYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATIONSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN标志位。

  • UI 控件同步:确保应用程序的UI控件(如工具栏或画笔工具)与系统栏的显示状态保持一致。可以通过View.OnSystemUiVisibilityChangeListener接收回调,确保UI控件在系统栏显示或隐藏时同步更新。

  • 焦点变化处理:在onWindowFocusChanged方法中,确保在获得窗口焦点时隐藏系统栏,失去焦点时取消任何定时隐藏的操作。

  • 手势检测:为了允许用户手动显示或隐藏系统栏,可以实现GestureDetector,检测onSingleTapUp事件,并在点击屏幕时触发系统栏的显示或隐藏。

  • 项目配置

    开发环境

    • IDE:Android Studio 4.1.1
    • 运行时版本:1.8.0_242-release-1644-b01
    • 操作系统:Windows 10 10.0

    虚拟设备

    • 设备名称:Pixel 2 API 28
    • CPU/ABI:Google Play Intel Atom (x86)
    • SD Card:512M
    • 快boot版本:fastboot.chosen

    项目创建

    • 新建项目:选择Empty Activity
    • 配置Minimum SDKAPI 16: Android 4.1 (Jelly Bean)

    代码示例

    以下是完整的代码示例,展示了如何在不同全屏模式下设置系统UI可见性:

    package com.mk;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.RadioButton;
    import androidx.appcompat.app.AppCompatActivity;
    public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ((RadioButton) findViewById(R.id.radioButtonLeanBack)).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    leanBack();
    }
    });
    ((RadioButton) findViewById(R.id.radioButtonImmersive)).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    immersive();
    }
    });
    ((RadioButton) findViewById(R.id.radioButtonStickyImmersive)).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    stickyImmersive();
    }
    });
    ((RadioButton) findViewById(R.id.radioButtonShowSystemUi)).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    showSystemUI();
    }
    });
    }
    private void leanBack() {
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    | View.SYSTEM_UI_LAYOUT_HIDE_NAVIGATION
    | View.SYSTEM_UI_LAYOUT_FULLSCREEN
    | View.SYSTEM_UI_FULLSCREEN
    | View.SYSTEM_UI_HIDE_NAVIGATION
    );
    }
    private void immersive() {
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_IMMERSIVE
    | View.SYSTEM_UI_LAYOUT_STABLE
    | View.SYSTEM_UI_LAYOUT_HIDE_NAVIGATION
    | View.SYSTEM_UI_LAYOUT_FULLSCREEN
    | View.SYSTEM_UI_FULLSCREEN
    | View.SYSTEM_UI_HIDE_NAVIGATION
    );
    }
    private void stickyImmersive() {
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
    | View.SYSTEM_UI_LAYOUT_STABLE
    | View.SYSTEM_UI_LAYOUT_HIDE_NAVIGATION
    | View.SYSTEM_UI_LAYOUT_FULLSCREEN
    | View.SYSTEM_UI_FULLSCREEN
    | View.SYSTEM_UI_HIDE_NAVIGATION
    );
    }
    private void showSystemUI() {
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
    View.SYSTEM_UI_LAYOUT_STABLE
    | View.SYSTEM_UI_LAYOUT_HIDE_NAVIGATION
    | View.SYSTEM_UI_LAYOUT_FULLSCREEN
    );
    }
    }

    其他注意事项

  • 安卓汽车化操作系统:汽车制造商可以阻止全屏模式的使用。

  • 布局调整:确保布局在系统栏显示或隐藏时不会发生调整,可以通过设置SYSTEM_UI_FLAG_LAYOUT_STABLE等标志位来实现。

  • 触摸事件传递:在粘性沉浸式模式下,用户从屏幕边缘滑动时,触摸事件会被传递给应用程序,允许应用程序根据需要响应。

  • 通过合理选择全屏模式并正确配置布局和UI控件,可以为用户提供更好的沉浸式体验,同时确保应用程序的稳定性和用户体验的良好性。

    上一篇:Android - Respond to UI visibility changes
    下一篇:Android - Hide the navigation bar

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年05月05日 14时03分21秒