Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示
Android 系统版本号非常多,较新的 4.4 ,较老的 2.3 ,都有人用。
Qt on Android 开发的 Android 应用。默认在 Android 设备上是非全屏的。
而有些应用的需求是全屏显示,比方游戏。那么怎么样才干做到这点呢?
我们须要分 Android 系统版本号来说。
Android 2.x
对于 4.0 曾经,比方 2.2 、 2.3 的系统。能够改动 AndroidManifest.xml 文件来实现全屏。
首先须要为 Qt on Android 应用生成一个 AndroidManifest.xml 文件。具体參考《 Qt on Android:图文具体解释Hello World全过程》一文。创建 AndroidManifest.xml 的示意图例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
点击上图中标号为 7 的那个button就可以创建一个 AndroidManifest.xml 文件。
该文件默认生成在 Qt 项目文件夹下的 android 子文件夹内。
然后须要打开 AndroidManifest.xml 文件,找到 Activity 标签。为其加入以下这个属性:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
注意和前、后的其他属性之间留空格。
在 2.x 系统上执行你的 Qt on Android 应用吧。已经全屏了。连标题栏都没有了。
Android 4.x
Android 系统版本号到了 4.0 以后,前面那种设置活动主题的方式无效了。
我们须要在 Java 代码中为 Activity 设置一个全屏的窗体标记。
这在 Java 撰写的 Android 应用上非常easy,仅仅须要在 Activity 的 onCreate() 方法中加入以下的代码:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
但是到了 Qt on Android 应用,就略微有些复杂了。
一步一步说吧,这次以我们的 Qt Quick App 为例来说明。先參考《Qt Quick 之 Hello World 图文具体解释》一文创建一个项目,我演示须要,还是以 HelloQtQuickApp 为基础改动的。
先看下改动前的效果图(我在 4.0.3 系统的机顶盒上执行):
注意到图片下方的状态栏了吧。
生成 AndroidManifest.xml
參考上一节吧。把 Activity 的 Theme 属性也设置一下。
为 Qt 项目加入 Java 文件
话说 Qt on Android 应用, Qt 部分的代码以 JNI 的方式经由 Java 代码启动的。为了能够启动 Qt 代码,进入 Qt 的世界, Qt 框架提供了 QPA 层以及必要的 Activity 、 Application 实现。详情參考《Qt on Android Episode 1(翻译)》和《Qt for Android 部署流程分析》两篇文章。
这里以 Qt 5.2.0 为例来作一简单说明。
QtActivity 简析
假设你观察 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
感兴趣的能够打开这个 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);
}
...
}
...
如你所见, QtActivity 区分了 SDK 版本号, 10 以上的请求 FEATURE_ACTION_BAR 特性, 10 以下(Android 2.3及以下)的版本号不要 title (太难看了。仅仅显示应用名字。木啥用)。
你懂的, Qt Creator 能够编译 Java 源代码(通过调用 Ant ), QtActivity 就是这样编译到你的 APK 中的。所以,我们也能够加入自己的 Java 代码喽。
我们要加入全屏标记,须要继承 QtActivity 类来实现一个新的 Activity 。当然假设你想粗暴地解决问题。能够直接改动 QtActivity.java 。直接加一行代码就可以。什么代码?看以下。
实现QtFullscreenActivity
QtFullscreenActivity 继承自 QtActivity 类,代码非常easy。
例如以下:
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);
}
}
上面代码中 "getWindow()" 起始的那行,就是设置全屏标记的。
加入 QtFullscreenActivity 到 pro 文件
我把 QtFullscreenActivity.java 文件放在了 android/src/an/qt/helloQtQuickApp/ 以下,所以 pro 文件里相关的部分是酱紫的:
OTHER_FILES += \
android/AndroidManifest.xml \
android/src/an/qt/helloQtQuickApp/QtFullscreenActivity.java
须要注意的是。 Java 代码中的包名(QtFullscreenActivity第一行)。和路径是严格匹配的, Java类名则和源代码文件名称严格匹配。
然后你能够看到以下的项目视图了:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
改动 AndroidManifest.xml
这是改动的最后一步了。
我们实现的 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 吧。
以下是如今执行的效果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
好啦,到此结束。
本系列的其他文章:
- Qt on Android:图文具体解释Hello World全过程
- Windows下Qt 5.2 for Android开发入门
- Qt for Android 部署流程分析
- Qt on Android:将Qt调试信息输出到logcat中
- Qt on Android: Qt 5.3.0 公布,针对 Android 改进说明
- Qt on Android Episode 1(翻译)
- Qt on Android Episode 2(翻译)
- Qt on Android Episode 3(翻译)
- Qt on Android Episode 4(翻译)
- Qt for Android 编译纯C工程
- Windows下Qt for Android 编译安卓C语言可执行程序
- Qt on Android: Android SDK安装
- Qt on Android: http下载与Json解析
- Qt on Android 之设置应用名为中文
Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示的更多相关文章
- Android 图片浏览器 从原来位置放大至全屏显示
android 图片浏览器 特点: 1.从网络加载图片,只需要传图片地址数组即可 2.点击图片,从原来位置放大至全屏 3.支持手势操作 4.完全自定义布局 项目源码请到GitHub下载:https:/ ...
- Android Activity 去掉标题栏及全屏显示
默认生成的活动(Activity)界面中包含标题栏,并带有状态栏.有时不需要这两个控件. 1.去掉标题栏 (三种方法) a:在setContentView()方法前 添加:requestWindowF ...
- QT中关于窗口全屏显示与退出全屏的实现
近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示 ...
- Qt全屏显示窗口、子窗口的相关函数
Qt全屏显示函数 window.showFullScreen() Qt最大化显示函数 window.showMaximized() Qt最小化显示函数 ...
- Android 全屏显示的方法(不包含状态栏)
我们都知道在Android中某些功能的实现往往有两种方法:一种是在xml文件中设置相应属性,另一种是用代码实现.同样Android实现全屏显示也可以通过这两种方法实现: 1.在AndroidManif ...
- Android 全屏显示
Android全屏显示: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst ...
- Android开发之全屏显示的两种方法
1.通过修改清单文件中Theme,实现全屏 <application android:name=".MyApplication" android:allowBackup=&q ...
- Android - 设置ImageView为全屏显示
设置ImageView为全屏显示 本文地址: http://blog.csdn.net/caroline_wendy ImageView默认会适应屏幕大小, 假设想使用全屏填充, 则须要使用: and ...
- 【Android】Android 设置Activity窗体 不显示标题和全屏显示
[一]Android 设置Activity窗体 不显示标题 android:theme="@android:style/Theme.NoTitleBar" <activity ...
随机推荐
- <a>标签中href="javascript:;"
javascript: 是一个伪协议,其他的伪协议还有 mail: tel: file: 等等. 1 <a id="jsPswEdit" class="set ...
- OD: Universal Shellcode
本节讲如果开发通用的 Shellcode. Shellcode 的组织 shellcode 的组织对成功地 exploit 很重要. 送入缓冲区的数据包括: . 填充物.一般用 0x90 (NOP) ...
- html禁止手机页面放大缩小
html禁止手机页面放大缩小 <meta name="viewport" content="width=device-width,minimum-scale=1.0 ...
- (转)Jquery弹窗插件Lhgdialog的用法
Lhgdialog的用法 大家都知道用js可以实现,但是在使用js实现的弹窗时得考虑很东西:浏览器的兼容.页面的交互等等问题. 在这里简单介绍一下lhgdialog的用法. 参数有: Title:弹窗 ...
- oracle 优化——索引与组合索引
1.索引结构.第一张图是索引的官方图解,右侧是存储方式的图解. 图中很清晰的展示了索引存储的状况. 在leaf 节点中存储了一列,索引所对应项的 :值,rowId,长度,头信息(控制信息) 这样我们就 ...
- Java学习笔记(2):jdk的配置
配置Java的开发环境 先说明一下,我的jdk文件目录是:D:\language\java\java soft\jdk1.6 JDK的安装与配置 解压“开发软件”中的jdk1.6.rar(解压版)到D ...
- 自定义 Preference Header 布局
1. Preference Header 概述: 对于什么是 Preference Header,以及何时使用 Preference Header,请参考我的另一篇博文: 何时使用 Preferenc ...
- 提升PHP速度的53个建议
1.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 2.$row[’id’] 的速度是$row[id]的7倍. 3.echo 比 print 快,并且使用e ...
- JS原型的剖析与理解
原型相关的概念 关于面向对象的概念 类 class 在js中就是构造函数 在传统的面向对象语言中,使用一个叫类的东西定义模版,然后使用模版创建对象 在构造方法中也具有类似的功能,因此称其为类 实例与对 ...
- JS 操作一个数据值
任何语言都有自己的操作数据的方法: Js也不例外,js有3种重要的方式来操作一个数据值. 1>复制它.例如把它赋给一个新的变量. 2>把它作为参数传递给一个函数或方法. 3>可以和其 ...