当前位置: 首页 > 知识库问答 >
问题:

Flutter:向下缩放时防止包装文本

别永年
2023-03-14

我有一个小部件:HtmlWidget('

因为它又大又长,当显示在手机上时,它会包装成:

Some Long 
Sentence Alright

有两种方法可以缩小规模:

1.Transform.scale

Transform.scale(
  child: myWidget,
  scale: 0.5,
)

这种方法的问题:

  • 文本仍然被包装(可能是因为它被布局,然后被缩小)

2.手机盒

Container(
  child: FittedBox(child: myWidget),
  width: 300,
  height: 100,
)

这种方法只有一个问题:我不知道预期的宽度/高度。

基本上,我想要一个小部件,它可以根据比例缩小myWidget(比如Transform.scale),但不包装内容(比如FittedBox)。

我该怎么做?


共有3个答案

祁兴运
2023-03-14

我建议一种新的方法。您可以尝试这种方法,并使用正则表达式更改html中文本的大小

main() async {

  String html =
  '''
  <font size="60">Some Long Sentence Alright</font>
  ''';
  html = html.replaceAllMapped(RegExp(r'font size=\"?(\d{1,2})\"'), (match) {
    print(match);
    print(match.group(0));
    print(match.group(1));
    var value = int.parse(match.group(1) ?? "");
    var newValue = value ~/ 2;
    print(newValue);
    print(match.group(0)!.replaceAll(value.toString(), newValue.toString()));
    var replace = match.group(0)!.replaceAll(value.toString(), newValue.toString());
    return replace;
  });
  print(html);
}

输出

I/flutter (21629): Instance of '_RegExpMatch'
I/flutter (21629): font size="60"
I/flutter (21629): 60
I/flutter (21629): 30
I/flutter (21629): font size="30"
I/flutter (21629):   <font size="30">Some Long Sentence Alright</font>
井斌斌
2023-03-14

FittedBox具有默认配合:BoxFit。包含把它改成你需要的。

FittedBox(
   fit: BoxFit.scaleDown,
   child: Text(
      text.pasDeven,

   ),
)
宋岳
2023-03-14

Transform小部件将其自身的约束向下传递到Text小部件,如果视口不够宽,不适合200px字体大小,则在向下缩放绘画之前将其包装。请参阅RenderTransform源代码:它扩展了RenderProxyBox,使用默认的performLayout,并且仅重写油漆

知道了这一点,您可以实现自己的RenderObject来转换约束(在布局期间)和画布(在绘制期间)。我在这里提出了一个简单的实现。如下所示:它使用x2、x4和x8字体大小,没有“幻影边距”。

最重要的是:


  @override
  void performLayout() {
    // ...

    // adjust the constraints width before performing child layout
    final childConstraints =
        constraints.copyWith(maxWidth: constraints.maxWidth / scale);

    // ...
  }

  @override
  void paint(PaintingContext context, Offset offset) {
    // scale down during painting to compensate
    layer = context.pushTransform(/* ... */);
  }
 类似资料:
  • 我希望能够覆盖 doubleTap 运动事件,使其不执行任何操作,而不是缩放和取消缩放。我在另一篇文章中读到,有人能够通过创建自定义WebView类并覆盖其中的内容来使其工作,但是无论如何,我似乎都无法在DoubleTap上启动,并且无论如何双击缩放仍在发生。 到目前为止,我的进展是我可以正确触发onDown事件(我在调试输出窗口中看到了msg)。 这是我的代码,在我帖子的最底部有一个链接,指向我

  • 缩放画布时,有什么方法可以阻止这种模糊吗?我想这和GPU插值有关。但我这里需要的是一个像素完美的“像素化”变焦。只需使用最近的“真实”相邻像素的颜色。 我在这里看到了解决方案,但在这两个解决方案中,有一个建议工作(#1/#4),#4肯定是CPU扩展,而#1我猜也是。 这种缩放需要快速——我希望能够支持多达20-25层(可能是StackPane中的画布,但我对其他想法持开放态度,只要它们不融化中央处

  • 悬停变焦chrome Ext。悬停时加载原始大小的图片。 对于我的图像,我调整了css内部的大小,因为它节省了我的photoshop裁剪步骤。 但对于使用悬停缩放的用户,将向中添加一个新类,并且将加载原始大小。 有什么办法可以阻止悬停变焦工作吗?同时保持css的大小调整。提前道谢。

  • 除了平移和旋转,HTML5的画布API还提供了缩放画布上下文的手段。本节,我们将使用scale()方法来按比例缩小画布上下文的高度。 图4-5 缩放画布上下文 绘制步骤 按照以下步骤,绘制一个按比例缩小的矩形: 1. 定义画布上下文,及矩形的尺寸: window.onload = function(){ var canvas  = document.getElementById("myCan

  • 本文向大家介绍在Vue项目中,防止页面被缩放和放大示例,包括了在Vue项目中,防止页面被缩放和放大示例的使用技巧和注意事项,需要的朋友参考一下 现在vue的脚手架生成项目之后我们会发现index.html页面中。 在head标签中,我们会看到meta标签中有一条显示是 但是我们发现这条语句中只是让user-scalable=0,这是不让用户进行缩放。 可以页面会在两个手指进行放大!!! 可以页面会

  • 问题内容: 如果使用“ fill_parent”或“ weight”拉伸视图或按钮,如何防止在ImageView或ImageButton中自动缩放位图? 例如,这将在屏幕顶部创建一个等距分布的4按钮工具栏时很有用,但是即使我使用scaleType =“ center”,按钮内部的图像也会不断拉伸,这应该避免根据文档缩放,但事实并非如此。 任何见解表示赞赏! 谢谢, 问题答案: 我发现使用andro