AppCompatTextView自动缩放字体在RecyclerView中卡顿,自定义高效自动缩放TextView
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AppCompatTextView自动缩放字体在RecyclerView中卡顿,自定义高效自动缩放TextView相关的知识,希望对你有一定的参考价值。
参考技术A 我们知道AppCompatTextView 中的autoSizeMinTextSize 可以自动字体缩放,但如果在列表中大量使用则会出现性能问题出现卡顿现象。分析AppCompatTextView源码可以看出实现逻辑是通过二分查找找到合适的字体大小,其中多次创建StaticLayout.Builder进行测量。所以在列表中会出现卡顿显现。非常简单的实现,就是 (控件宽度 ➗ 预设字体测试的文本宽度 )X 字号 = 缩放后的字号。
这种方式只适合单行的情况
在 Qt 中设计具有自动缩放字体大小的用户界面
【中文标题】在 Qt 中设计具有自动缩放字体大小的用户界面【英文标题】:Design user interfaces with automatically scaling fontsizes in Qt 【发布时间】:2016-10-18 18:50:50 【问题描述】:Qt 5.7 声称改进了高 DPI 支持。使用现代 Qt,可以创建一个应用程序启动器,例如:
#include <QApplication>
int main(int argc, char *argv[])
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
return app.exec();
我希望 UI 在高 DPI 上运行时会自动缩放,但缩放不一定按预期工作。至少它不会在 Linux 下为我扩展 UI。我看到的是布局扩大了,但字体保持在原来的位置,Qt Creator 在表单布局工具中分配它们的大小。
如果您希望某些元素的字体更大,并且您在表单设计屏幕中设置它,似乎没有办法说“两倍大”。相反,它会注入一个具有绝对磅值的字体属性。
QMessageBox 静态方法似乎也一样。显示一个静态 QMessageBox,如 QMessageBox::info
,其文本和图标不会放大以补偿高 dpi。
那么,究竟应该怎么做才能让在 Creator 中以标准 DPI 设计的 Qt 应用程序自动适应高 DPI 环境、字体、QMessageBoxes 等等。
我在设置应用程序的样式表以为 QMessageBox 使用更大的字体时获得了一些牵引力。但感觉很难看,我不知道如何自动触发它。
编辑:
手动设置环境变量
declare -x QT_SCALE_FACTOR=2
似乎引发了我正在寻找的那种行为。但是如何只在高 DPI 环境下自动完成,最好是在程序本身内部。 (我猜setenv (3)
可以在 Linux 下工作)
【问题讨论】:
由于操作系统不支持自动 UI 缩放功能,还没有适用于 Linux 的自动 UI 缩放功能,请注意某些自定义 Linux 子系统,例如GNOME 会这样做,但 Qt 没有通用接口可以利用。 @AlexanderVx 我有点想应该能够在 main() 中按if ( QGuiApplication::primaryScreen()->physicalDotsPerInch() > N ) QSomethingOrOtherClass::setGlobalScaleFactor(2)
的顺序提供一些东西。并且在没有操作系统支持的情况下执行此操作。这实际上是我认为将Qt::AA_EnableHighDpiScaling
设置为属性会做的事情。
【参考方案1】:
从 Qt5.11 开始,对于我的 4k 屏幕 Ubuntu 18.04 笔记本电脑来说,以下内容似乎已经足够了:
从官网(不是apt)下载并安装Qt5.11。 打开~/.local/share/applications/DigiaQt-qtcreator-community.desktop
文件。
将行 Exec=/path/to/Qt/Tools/QtCreator/bin/qtcreator
更改为 Exec=env QT_AUTO_SCREEN_SCALE_FACTOR=1 /path/to/Qt/Tools/QtCreator/bin/qtcreator
重新启动 Qt Creator。
【讨论】:
以上是关于AppCompatTextView自动缩放字体在RecyclerView中卡顿,自定义高效自动缩放TextView的主要内容,如果未能解决你的问题,请参考以下文章