我已经开发了一个安卓应用程序 QtQML但是,当我改变我的生活方式时,我就会发现,我的生活方式很好。安卓手机设置 例如显示字体->small to medium or medium to big.It is not applied in my application there is no change in application.How to achieve this change in my application.Thanks in advance.
例如:-如果我改变了安卓手机显示设置的字体大小,那么它就会自动改变每个应用程序的字体大小,如whatsapp,facebook等,但在我的例子中,我用QtQML开发了一个安卓应用程序,它没有改变显示字体大小。
你必须手动操作,使用C++和JNI。
#include <QtAndroidExtras>
然后得到Java QtActivity类。
QAndroidJniObject qtActivity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
获取资源。
QAndroidJniObject resources = qtActivity.callObjectMethod("getResources","()Landroid/content/res/Resources;");
获取配置对象并读取字体比例。
QAndroidJniObject configuration = resources.callObjectMethod("getConfiguration","()Landroid/content/res/Configuration;");
float scale = configuration.getField<float>("fontScale");
然后用scale变量设置一个QMLEngine上下文变量。
engine.rootContext()->setContextProperty("fontScale", scale);
@Hubi 你好,我在我的qtqml应用程序中尝试了这个代码,当我使用这个解决方案时,它工作得很好,但问题是当我启动应用程序时,默认情况下,它正在获取资源字体大小,并将该值设置到我的UI代码中,我尝试了以下内容。
#include "addnewguestclass.h"
AddNewGuestClass::AddNewGuestClass()
{
QQmlApplicationEngine *m_View;
m_View = new QQmlApplicationEngine();
m_View->load(QUrl(QStringLiteral("qrc:test.qml")));
//m_View->rootContext()->setContextProperty("AddNewGuest",this);
//QObject *root = m_View->rootObjects().value(0);
QAndroidJniObject qtActivity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
QAndroidJniObject resources = qtActivity.callObjectMethod("getResources","()Landroid/content/res/Resources;");
QAndroidJniObject configuration = resources.callObjectMethod("getConfiguration","()Landroid/content/res/Configuration;");
float scale = configuration.getField<float>("fontScale");
qDebug()<<"Scale: "<< scale;
m_View->rootContext()->setContextProperty("fontScale", scale);
}
main.qml
property real dp: screen.pixelDensity * 10 * 2.54 / 160
Item {
width: 50*dp
height: 50*dp
anchors.centerIn: parent
Label {
text: qsTr("Hi, I am Hemant")
//font.pixelSize: 16*dp
font.pixelSize: Qt.application.font.pixelSize
}
}