如何使安卓app适配全面屏手机实现完全全屏显示
安卓app实现全面屏显示
主要修改类文件MainActivity.java
重写类方法onCreate
适配全面屏显示,消除letterbox黑边
在
onCreate
方法下编写以下内容,设置app显示布局模式layoutInDisplayCutoutMode
,官方详细描述:https://developer.android.com/develop/ui/views/layout/display-cutout?hl=zh-cn#handle1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity{ @override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; } } }
隐藏系统UI
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
@RequiresApi(api = Build.VERSION_CODES.R) private void hideSystemUI() { // 获取当前窗口的装饰视图 View decorView = getWindow().getDecorView(); // 获取 WindowInsetsController WindowInsetsController insetsController = decorView.getWindowInsetsController(); if (insetsController != null) { // 设置系统 UI 行为: 可以通过滑动调出系统UI,短暂显示系统UI insetsController.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); // 隐藏手势条 insetsController.hide((WindowInsets.Type.systemGestures())); // 隐藏系统栏:状态栏、导航栏 insetsController.hide((WindowInsets.Type.systemBars())); } }
设置默认翻转显示
1
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
完整示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.view.WindowManager; import android.content.pm.ActivityInfo; public class MainActivity extends AppCompatActivity{ @override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; } setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); // 隐藏系统 UI if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { hideSystemUI(); } } @RequiresApi(api = Build.VERSION_CODES.R) private void hideSystemUI() { // 获取当前窗口的装饰视图 View decorView = getWindow().getDecorView(); // 获取 WindowInsetsController WindowInsetsController insetsController = decorView.getWindowInsetsController(); if (insetsController != null) { // 设置系统 UI 行为: 可以通过滑动调出系统UI,短暂显示系统UI insetsController.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); // 隐藏手势条 insetsController.hide((WindowInsets.Type.systemGestures())); // 隐藏系统栏:状态栏、导航栏 insetsController.hide((WindowInsets.Type.systemBars())); } } }
参考
stackoverflow:android - Fullscreen App With DisplayCutout - Stack Overflow
安卓文档:
本文由作者按照 CC BY 4.0 进行授权