java - 无法在某些设备上隐藏状态栏
问题描述
在我的设备上,我可以通过执行以下操作成功隐藏状态栏:
在我的清单中,我添加了以下内容:
<activity
android:name=".SomeActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"
/>
然后以我的风格:
<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
在我的设备(运行 Android 9 的三星 J7 Pro)上,结果如下:
如您所见,状态栏和操作栏是隐藏的。但是如果我在华为 P20 Lite 上运行它,我得到的结果是:
顶部有一个黑色条,状态栏所在的位置。
为什么会这样?
解决方案
创建一个与文件values-v28
夹平行的values
文件夹。
复制新styles.xml
文件中的主题内容并添加 <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
此外,在 Activity 类中添加以下内容
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.my_activity);
}
}
推荐阅读
- inventory-management - OCS 清单是否支持远程 WMI?
- java - Autowired 在 Spring Boot 中返回 null
- c# - .Net 中的反应式 Rx 压缩队列
- tensorflow - 检查 TensorFlow 安装是否支持 XLA
- java - 我无法使用 Dagger2 将我的课程注入我的 ViewHolder
- javascript - 从 html 和 javascript 中的下拉选择中调用函数
- deployment - .NET CORE 通过命令行发布文件夹配置文件不起作用
- c++ - 如何在 Windows 上使用 Visual Studio 2017 连接到 C++ 中的 sqlite 数据库?
- url - URL.getText() 是否总是关闭连接?
- c# - 打印 ac# 对象列表