我过去几天一直试图弄清楚这一点,并没有成功......
我现在正在学习机器人,目前正在创建一个带有历史记录的计算器作为我的学习项目.我有一个TextView负责显示所有历史...我使用的数字字体看起来像一个计算器字体,但这只适用于数字,小数和逗号.我希望所有操作符都以不同的字体突出显示(Arial Narrow).我已经能够使用spannable字符串精美地工作,我指定字体颜色以及使用CustomTypeFaceSpan类来应用我的自定义字体的字体.
问题...当我混合使用字体时,行高似乎存在问题,所以我发现这篇文章演示了如何使用另一个自定义类来为每个添加的spannable文本行应用行高:
public class CustomLineHeightSpan implements LineHeightSpan{
private final int height;
public CustomLineHeightSpan(int height){
this.height = height;
}
@Override
public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v, FontMetricsInt fm) {
fm.bottom += height;
fm.descent += height;
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,我无法弄清楚为什么.如果我不应用不同的字体,那么它会按预期显示,第一行上方没有空格,行间距约为5px.当我应用替代字体时,在第一行文本上方有一个大约10到15px的空间,行间距大约相同10到15px.
字体大小没有区别,只有字体.我错过了什么 我实现了CustomLineHeightSpan,它实现了LineHeightSpan并覆盖了chooseHeight方法.我称之为:
WordtoSpan.setSpan(new CustomLineHeightSpan(10),operatorPositions.get(ii),operatorPositions.get(ii)+ 1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
我对CustomLineHeightSpan的调用似乎并不重要.没有什么变化...
任何人都知道我错过了什么......我确信这是一个"我不敢相信我错过了"的答案,但目前似乎无法弄明白.
谢谢你们的帮助:-)
你们在我的上一个问题上指出了正确的方向,你们真是太棒了,我在这里有一些原始问题的扩展:
如何将JTable列设置为String并排序为Double?
我现在通过使用我的自定义单元格渲染器将我的价格列格式化为$ ###,## 0.00,我现在也为单元格设置了一个JTextField编辑器.编辑单元格工作正常,除了更新值时,我的自定义渲染器中设置的数字格式似乎不再格式化单元格(我在编辑提交后丢失了$).即使在初始显示数据之后,此渲染器是否也不应渲染单元格?
我试过使用以下但没有运气:
((AbstractTableModel) table.getModel()).fireTableDataChanged();
Run Code Online (Sandbox Code Playgroud)
我希望这会强制表重新验证并使用自定义渲染器重新绘制单元格以呈现新值,但遗憾的是这不起作用...
我错过了什么......显然,但是什么?