Android qmlui中的字体更改
我已经用Qt/QML开发了一个android应用程序,它运行良好。 但是,当我改变我的Android手机设置时,比如显示字体->小到中或中到大。 它不适用于我的申请-申请中没有更改。 如何在我的应用程序中实现此更改。 提前谢谢 例如:- 如果我更改android手机显示设置的字体大小,那么它会自动更改每个应用程序eq.whatsapp、facebook等的字体大小。Android qmlui中的字体更改,android,qt,qml,settings,Android,Qt,Qml,Settings,我已经用Qt/QML开发了一个android应用程序,它运行良好。 但是,当我改变我的Android手机设置时,比如显示字体->小到中或中到大。 它不适用于我的申请-申请中没有更改。 如何在我的应用程序中实现此更改。 提前谢谢 例如:- 如果我更改android手机显示设置的字体大小,那么它会自动更改每个应用程序eq.whatsapp、facebook等的字体大小。 但在我的例子中,我已经在Qt/QML中开发了一个android应用程序,它不会随着显示字体大小而改变 < P>手动完成此操作,使用
但在我的例子中,我已经在Qt/QML中开发了一个android应用程序,它不会随着显示字体大小而改变 < P>手动完成此操作,使用C++和JNI。p> 包括 然后获取JavaQTActivity类
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");
@Hubi嗨,我在我的qt/qml应用程序中尝试了这段代码。 当我使用这个解决方案时,它工作得很好,但问题是,当我默认启动应用程序时,它会获取resource fontsize并将该值设置到我的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);
}
请添加更多内容,例如显示一段代码,其中您正在使用字体和设置大小,这样您的问题可能会被否决/removed@Amfasis我已经更新了我的问题,对于这段代码,整个应用程序都无法上传,这意味着应用程序的每个UI都应该根据itdisplay设置进行更改。请尝试使用此解决方案。我猜唯一的方法是使用Android API,然后使用Jni调用C++/QML。阅读如何阅读。在您的情况下,您必须关注fontScale。也要检查一下。查看文章中的代码示例。@RamkumarR,我已经完成了线程,没有找到任何解决方法。谢谢你的建议。谢谢你,我会像这样使用。请更新您的初始帖子!不要回复自己的帖子。备注:标签中的font.pixelSize应为fontScale。=>font.pixelSize:fontScaleOk Hubi..,我已经应用了这个,但没有任何更改。
#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);
}
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
}
}