admin管理员组

文章数量:1565819

Demo 链接:https://github/gongjianbo/HelloQtAndroid.git

1.前言

安卓的 Application 类相当于 Qt QApplication,维护应用程序全局状态(Application文档)。在 App 运行过程中有且仅有一个 Application 对象贯穿整个生命周期,所以也可以用来放一些全局变量和函数。

安卓的 Activity 类似于 Qt StackView 中的单个页面(Activity文档)。因为 Qt 是 DirectUI,页面都是绘制到最顶层的窗口,所以 Qt for Android 默认只有一个 activity,想要实现安卓原生的那种 activity 切换就需要自定义 activity。

2.自定义 Application

先创建一个 MyApplicatiion.java 类文件放到 AndroidManifest.xml 旁的 java 或者 src 文件夹,如果是默认的影子构建那就在 build- 目录下,也可以修改 build.grade 路径设置自定义目录。

在 Qt5 中,自定义的 Application 继承自 org.qtproject.qt5.android.bindings.QtApplication。

// 根据包名在AndroidManifest.xml中指定Application的name路径(=包名.类名)
package com.gongjianbo.demo;
import org.qtproject.qt5.android.bindings.QtApplication;
import android.app.Application;
import android.content.Context;
 
public class MyApplication extends QtApplication {
    private static Context mContext;
    @Override
    public void onCreate() {
        super.onCreate();
        // getApplicationContext();
        mContext = this;
    }
    public static Context getContext() {
        return mContext;
    }
}

然后在 AndroidManifest.xml 中修改原 application 标签的 android:name 属性,改为我们自定义的 Application 类的包名+类名。

android:name="com.gongjianbo.demo.MyApplication"

3.自定义 Activity

先创建一个 MainActivity.java 类文件放到 AndroidManifest.xml 旁的 java 或者 src 文件夹,如果是默认的影子构建那就在 build- 目录下,也可以修改 build.grade 路径设置自定义目录。

在 Qt5 中,自定义的 Activity 继承自 org.qtproject.qt5.android.bindings.QtActivity 可以用来呈现我们的 Qt 界面。

// 根据包名在AndroidManifest.xml中指定Activity的name路径(=包名.类名)
package com.gongjianbo.demo;
import org.qtproject.qt5.android.bindings.QtActivity;
import android.view.WindowManager;
import android.os.Bundle;
import android.util.Log;
 
public class MainActivity extends QtActivity {
    private String LogTag = "Main Activity";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.e(LogTag , "onCreate MainActivity start");
        super.onCreate(savedInstanceState);
        // 设置屏幕常量
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        Log.e(LogTag , "onCreate MainActivity finish");
    }
}

然后在 AndroidManifest.xml 中修改原 activity 标签的 android:name 属性,改为我们自定义的 Activity 类的包名+类名。

android:name="com.gongjianbo.demo.MainActivity"

通过打印日志,可以看到 Activity 是在 Qt main 函数之前初始化完成的。 

本文标签: 自定义androidQTapplicationActivity