|
发表于 2024-3-31 18:01:17
|
显示全部楼层
要实现文本超过行数自动换行的效果,可以使用U8g2库中的`u8g2.setFontMode()`函数来设置字体模式为“裁剪”模式。在“裁剪”模式下,如果文本超出屏幕宽度,将会被截断并且不会显示在屏幕上。
以下是调整后的代码,实现了超过行数自动换行的效果:
- #include <U8g2lib.h>
- U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
- void setup() {
- Serial.begin(115200);
- u8g2.setBusClock(800000);
- u8g2.begin();
- u8g2.enableUTF8Print();
- }
- void loop() {
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_wqy12_t_chinese3);
- u8g2.setFontMode(1); // 设置字体模式为“裁剪”
- // 设置文本位置和行高
- int x = 0;
- int y = 12;
- int lineHeight = 13;
- // 要显示的文本
- String text = "一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十";
- // 计算屏幕宽度和文本长度
- int screenWidth = u8g2.getDisplayWidth();
- int textLength = u8g2.getUTF8Width(text.c_str());
- // 检查文本是否超过屏幕宽度
- if (textLength > screenWidth) {
- // 当文本长度超过屏幕宽度时,进行换行处理
- String tempText = ""; // 临时存储每行的文本
- int index = 0; // 当前字符索引
- while (index < text.length()) {
- char currentChar = text.charAt(index);
- int currentCharWidth = u8g2.getUTF8Width(¤tChar);
- // 如果当前字符加上当前行的字符宽度小于屏幕宽度,就将字符添加到当前行
- if (u8g2.getUTF8Width((tempText + currentChar).c_str()) <= screenWidth) {
- tempText += currentChar;
- index++;
- }
- // 如果当前字符加上当前行的字符宽度大于屏幕宽度,就换行
- else {
- u8g2.setCursor(x, y);
- u8g2.print(tempText);
- // 重置当前行的文本和坐标
- tempText = "";
- y += lineHeight;
- }
- }
- // 打印最后一行文本
- u8g2.setCursor(x, y);
- u8g2.print(tempText);
- } else {
- // 当文本长度小于或等于屏幕宽度时,直接打印
- u8g2.setCursor(x, y);
- u8g2.print(text);
- }
- u8g2.sendBuffer();
- }
复制代码
这样修改后的代码会根据屏幕的宽度,自动将文本进行换行显示。在此代码中,设置了一个行高`lineHeight`,用于控制每行文本之间的间距。在示例代码中,行高设置为13,可以根据实际需要进行调整。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|