- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
考虑这个简单的例子:
我有这样的单行文本:“你好”
我想使用 StaticLayout 测量此文本。所以我写了这样的东西:
StaticLayout layout = new StaticLayout("Hello", myTextView.getPaint(), myTextView.getWidth(), Layout.Alignment.NORMAL, 1, lineSpace, false);
在上面的代码中,我在 for 循环中更改了 lineSpace 变量,并且每次都记录布局的高度:
for(int lineSpace=0; lineSpace<20;lineSpace++){
StaticLayout layout = new StaticLayout("Hello", myTextView.getPaint(), myTextView.getWidth(), Layout.Alignment.NORMAL, 1, lineSpace, false);
Log.d("TAG", "layout height: " + layout.getHeight());
}
当我在带有 android M 布局的设备上运行此代码时,高度不会随着 lineSpace 的多个值而改变。但在较低的 android 版本中,布局的高度分别随行间距而变化。
虽然当你的文本超过一行时,StaticLayout 会考虑两行之间的行间距。但似乎 Android M 不考虑最后一行的行空间,但较低的 Android 版本会考虑。
我的问题是:在什么版本的 android StaticLayout 之后考虑最后一行的行空间?我可以这样写吗:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// in this version StaticLayout don't consider line space for last line
} else {
// in this version StaticLayout consider line space for last line
}
最佳答案
我在源代码中做了一些快速挖掘,似乎是 this part是罪魁祸首:
if (needMultiply && !lastLine) {
double ex = (below - above) * (spacingmult - 1) + spacingadd;
if (ex >= 0) {
extra = (int)(ex + EXTRA_ROUNDING);
} else {
extra = -(int)(-ex + EXTRA_ROUNDING);
}
} else {
extra = 0;
}
旧版本缺少 !lastLine
条件,因此也会在最后一行添加间距。
条件是在this commit中添加的,如果我的 github foo 没有让我失望,应该从 Android 5 开始包含它。
显然,就像提交提到的那样,这只影响单行文本,对于多行文本,高度似乎计算正确。因此,一个简单的解决方法可能是检查文本是否只有一行(使用 getLineCount())以及 Android 版本是否小于 5,如果小于 5,则减去一次行距。
关于android - LineSpace 如何影响一行文本中的 StaticLayout 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41719899/
我想增加 VIM 中的行高(“linespace”)。 官方命令是: set linespace=X 但是,当我将它放入我的 .vimrc 文件时,这不起作用(无效) set t_Co=256 syn
我有一个将 lineSpacingExtra 设置为 8dp 的 EditText。当我打开带有此 EditText 和预设文本的页面时,行距效果很好。但是当我在同一页上单击 EditText 的末尾
我正在尝试创建一个自定义 UILabel 类,它允许我增加 UILabel 上的行间距。我知道您可以在 IB 中使用属性文本字符串执行此操作,但是如果您使用自定义字体,则它不起作用。这是我的类(cla
我正在尝试为我的 UILabel 提供 LineSpacing 和 LineHeight。我有一个具有两个功能的扩展,它们都可以单独工作。虽然不能让他们一起工作。 extension UILabel
考虑这个简单的例子: 我有这样的单行文本:“你好” 我想使用 StaticLayout 测量此文本。所以我写了这样的东西: StaticLayout layout = new StaticLayout
我有一个 UILabel 的子类,其属性 lineSpacing 设置如下: var lineSpacing = CGFloat(20.0) 当我在这里使用它时,它会向上推文本,即使它没有用于任何用途
似乎有两种不同的方法可以在 iOS 中显式设置属性字符串的行高。哪种是首选方法,为什么? https://developer.apple.com/documentation/uikit/nsmutab
我有一个 TextBlock 我想传递 'LineSpacing' 的属性。将“LineHeight”与 LineStackingStrategy="BlockLineHeight" 一起使用的问题在
这发生在 Linux 上。 执行此代码时出现问题(我在小部件的绘制事件中绘制): painter.drawText(0, 0, 1000, 1000, 0, QString("0"), &charBo
在 WordWrap 模式下,如何在 QLabel 中设置行高? 最佳答案 使用 HTML 文本: QString template = "%2"; QString targetText = temp
有没有办法设置 lineSpacing NSParagraphStyle 的属性(property)/ NSMutableParagraphStyle NSAttributedString 的属性反对
我有一个包含多行的 UILabel。使用 native 方法动态设置文本和我的标签高度: [myLabel sizeToFit]; 我有另一种方法可以在我的标签中设置行间距: NSMutabl
我很确定这实际上是一个 UIKit 错误,但我想获得一些输入以查看我是否遗漏了一些愚蠢的东西。 这是我的代码: // single line with modified line spacing an
我创建了一个普通的 UILabel,并希望能够为 UILabel 中的文本添加行间距。 虽然当我这样做时它会影响 adjustsFontSizeToFitWidth 并且它不再适合 UILabel。
试图消除我的图表中连接点的线,以便使用我自己的最适合的线。我在代码中使用了 linespace='None' 来绘制点。非常困惑为什么再次运行代码后这些行仍然存在。 任何帮助将不胜感激。 x_a =
如何制作一个 UILabel 或 UITextView 以在 swift 3 中实现这一点。 最佳答案 这里是带标签的解决方案。 let label = UILabel() let stringVal
我想将我的 ImageSpan 与文本的基线对齐,但我还需要在行之间添加一些间距。 问题是,当我添加行间距时,ImageSpan 没有与文本的基线对齐,而是与 baseline+lineSpacing
如果我使用具有自定义 kern 和 lineSpacing 的 NSAttributedString,我会得到错误的 UILabel 高度。 这是我设置自定义紧排和行间距的方法: override f
我有一个 UIButton,它实际上只有 2 个单词,分为 2 行(稍后我在代码中将行值设置为“2”)。我一直在通过为段落 lineSpacing 设置负值来收紧默认 lineSpacing(如下图所
我是一名优秀的程序员,十分优秀!