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()-&gt;physicalDotsPerInch() &gt; 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的主要内容,如果未能解决你的问题,请参考以下文章

如何自动缩放一组控件的字体大小?

如何编写自动缩放到系统字体和 dpi 设置的 WinForms 代码?

如何正确自动缩放 UIButton 和标题文本?

Visual Studio 2010 默认缩放级别

如何根据WatchKit中的手表大小缩放字体大小?

一句话知识:如何解决winform自动缩放产生的布局问题.