标签:qt on android qt quick android
Android 系统版本很多,较新的 4.4 ,较老的 2.3 ,都有人用。 Qt on Android 开发的 Android 应用,默认在 Android 设备上是非全屏的。而有些应用的需求是全屏显示,比如游戏。那么怎么样才能做到这点呢?
请给我的决赛文章《Qt Quick 图像处理实例之美图秀秀(附源码下载)》投票,谢谢。
我们需要分 Android 系统版本来说。
对于 4.0 以前,比如 2.2 、 2.3 的系统,可以修改 AndroidManifest.xml 文件来实现全屏。
首先需要为 Qt on Android 应用生成一个 AndroidManifest.xml 文件,具体参考《 Qt on Android:图文详解Hello World全过程》一文。创建 AndroidManifest.xml 的示意图如下:
点击上图中标号为 7 的那个按钮即可创建一个 AndroidManifest.xml 文件。该文件默认生成在 Qt 项目目录下的 android 子目录内。
然后需要打开 AndroidManifest.xml 文件,找到 Activity 标签,为其加入下面这个属性:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
在 2.x 系统上运行你的 Qt on Android 应用吧,已经全屏了,连标题栏都没有了。
Android 系统版本到了 4.0 以后,前面那种设置活动主题的方式无效了。我们需要在 Java 代码中为 Activity 设置一个全屏的窗口标记。
这在 Java 撰写的 Android 应用上很简单,只需要在 Activity 的 onCreate() 方法中加入下面的代码:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
一步一步说吧,这次以我们的 Qt Quick App 为例来说明,先参考《Qt Quick 之 Hello World 图文详解》一文创建一个项目,我演示需要,还是以 HelloQtQuickApp 为基础修改的。
先看下修改前的效果图(我在 4.0.3 系统的机顶盒上运行):
注意到图片下方的状态栏了吧。
参考上一节吧,把 Activity 的 Theme 属性也设置一下。
话说 Qt on Android 应用, Qt 部分的代码以 JNI 的方式经由 Java 代码启动的。为了能够启动 Qt 代码,进入 Qt 的世界, Qt 框架提供了 QPA 层以及必要的 Activity 、 Application 实现。详情参考《Qt on Android Episode 1(翻译)》和《Qt for Android 部署流程分析》两篇文章。
这里以 Qt 5.2.0 为例来作一简单说明。
如果你观察 AndroidManifest.xml 文件,会发现里面的 Activity 标签,指定的 activity 名字是:"org.qtproject.qt5.android.bindings.QtActivity" 。没错,就是它!它是由 Qt 框架提供的,你 Qt on Android 应用的入口。 QtActivity 的位置在这里:
c:\qt\Qt5.2.0\5.2.0\android_armv5\src\android\java\src\org\qtproject\qt5\android\bindings\QtActivity.java
下面是 QtActivity.java 的 onCreate 函数的摘录:
... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { setTheme(Class.forName("android.R$style").getDeclaredField(QT_ANDROID_DEFAULT_THEME).getInt(null)); } catch (Exception e) { e.printStackTrace(); } if (Build.VERSION.SDK_INT > 10) { try { requestWindowFeature(Window.class.getField("FEATURE_ACTION_BAR").getInt(null)); } catch (Exception e) { e.printStackTrace(); } } else { requestWindowFeature(Window.FEATURE_NO_TITLE); } ... } ...
你懂的, Qt Creator 可以编译 Java 源码(通过调用 Ant ), QtActivity 就是这样编译到你的 APK 中的。所以,我们也可以添加自己的 Java 代码喽。
我们要添加全屏标记,需要继承 QtActivity 类来实现一个新的 Activity 。当然如果你想粗暴地解决这个问题,可以直接修改 QtActivity.java ,直接加一行代码即可。什么代码?看下面。
QtFullscreenActivity 继承自 QtActivity 类,代码非常简单。如下:
package an.qt.helloQtQuickApp; import android.content.Context; import android.content.Intent; import android.app.PendingIntent; import android.util.Log; import android.os.Bundle; import android.view.WindowManager; public class QtFullscreenActivity extends org.qtproject.qt5.android.bindings.QtActivity { private final static String TAG = "QtFullscreen"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } }
我把 QtFullscreenActivity.java 文件放在了 android/src/an/qt/helloQtQuickApp/ 下面,所以 pro 文件中相关的部分是酱紫的:
OTHER_FILES += android/AndroidManifest.xml android/src/an/qt/helloQtQuickApp/QtFullscreenActivity.java
然后你可以看到下面的项目视图了:
这是改动的最后一步了。
我们实现的 Activity 名字是 QtFullscreenActivity ,所以呢, AndroidManifest.xml 文件中也要修改,保持一致。见下面:
<?xml version=‘1.0‘ encoding=‘utf-8‘?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:installLocation="auto" package="an.qt.helloQtQuickApp" android:versionName="1.0"> <application android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="@string/app_name"> <activity android:name="an.qt.helloQtQuickApp.QtFullscreenActivity" android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:label="@string/app_name" android:screenOrientation="unspecified"> <intent-filter> ... </manifest>
好啦,到此为止,全部改动就绪。运行我们的 HelloQtQuickApp 吧。
下面是现在运行的效果:
好啦,到此结束。
请给我的决赛文章《Qt Quick 图像处理实例之美图秀秀(附源码下载)》投票,谢谢。
本系列的其他文章:
Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示,布布扣,bubuko.com
Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示
标签:qt on android qt quick android
原文地址:http://blog.csdn.net/foruok/article/details/38265349