如何让Kivy开发的应用在三星A13安卓设备上全屏显示?
在三星A13安卓设备上实现Kivy应用全屏显示
我希望开发的应用能在三星A13手机上以全屏模式显示,但无论如何操作都无法实现:手机的时间和导航栏始终可见。我使用Ubuntu Mate 20.04系统上的Buildozer将Kivy项目编译为APK文件。
我尝试过以下两种配置:
第一种配置
from kivy.config import Config Config.set('graphics', 'width', '491') Config.set('graphics', 'height', '1000') Config.set('graphics', 'resizable', '0') Config.set('graphics', 'borderless', '1') Config.set('graphics', 'fullscreen', 'True')
该配置在电脑上能实现全屏,但在手机上无效。
第二种配置
from kivy.config import Config Config.set('graphics', 'width', '491') Config.set('graphics', 'height', '1000') Config.set('graphics', 'resizable', '0') Config.set('graphics', 'borderless', '1') from kivy.core.window import Window Window.fullscreen = True
此配置导致电脑端应用无法显示,手机端仍无任何效果。请问如何让我的应用在安卓设备上实现全屏显示?
解决方案
要在安卓设备上实现真正的全屏(隐藏状态栏和导航栏),仅靠Kivy的图形配置不够,需要结合Buildozer的配置和安卓原生沉浸模式设置,具体步骤如下:
1. 修改Buildozer配置文件(buildozer.spec)
在配置文件中添加或修改以下项:
# 启用安卓沉浸模式 android.use_immersive_mode = True # 设置应用为全屏主题 android.theme = "@android:style/Theme.NoTitleBar.Fullscreen" # 可选:部分设备需要此权限来隐藏系统栏 android.permissions = android.permission.SYSTEM_ALERT_WINDOW
2. 调整Kivy代码配置
移除固定宽高设置,让应用自适应屏幕,同时正确配置全屏:
from kivy.config import Config # 不设置固定宽高,让应用适配设备屏幕 Config.set('graphics', 'resizable', '1') Config.set('graphics', 'borderless', '1') Config.set('graphics', 'fullscreen', 'auto') from kivy.core.window import Window # 初始化后设置自适应全屏 Window.fullscreen = 'auto'
使用'auto'而非True,能让Kivy自动适配不同设备的屏幕尺寸,避免固定宽高导致的适配问题。
3. 强制触发安卓沉浸模式(针对顽固设备)
如果以上设置仍无效,可通过pyjnius调用安卓原生API强制隐藏系统栏,在主应用类中添加以下代码:
from kivy.app import App from kivy.utils import platform class MyApp(App): def on_start(self): if platform == 'android': from jnius import autoclass PythonActivity = autoclass('org.kivy.android.PythonActivity') View = autoclass('android.view.View') activity = PythonActivity.mActivity window = activity.getWindow() # 开启粘性沉浸模式,隐藏状态栏和导航栏 window.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 | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY ) if __name__ == '__main__': MyApp().run()
这段代码调用安卓原生API开启粘性沉浸模式,用户操作后状态栏和导航栏会自动重新隐藏。
4. 重新编译验证
修改完成后,重新编译APK并安装到设备:
buildozer android debug deploy run
内容的提问来源于stack exchange,提问作者fabien
相关产品推荐
相关产品推荐

