【发布时间】:2014-04-07 17:19:56
【问题描述】:
我有一个EditText,我想放大它,并使用setScaleX/setScaleY 滚动,它工作正常——文本正在正确的位置进行编辑。
但是当我尝试选择文本时 - 它会将选择句柄绘制到位置,例如文本未缩放时。已知bug。
这是预期的结果,因为手柄是在与视图大小相关的弹出窗口上绘制的。
android.widget.Editor 上的所有操作都针对其字段 private TextView mTextView;。如果我们通过反射设置自己的编辑器,我不知道如何处理私有方法,这是不可覆盖的。
选择句柄也绘制在弹出窗口android.widget.Editor.HandleView#HandleView在布局中计算的坐标上,我只需要DynamicLayout,但它对我们的目的没有区别。
方法android.text.Layout#getPrimaryHorizontal(int, boolean) 是公共的,它的值可以成倍增加,但是为此我们需要扩展和覆盖私有方法android.widget.TextView#makeSingleLayout,但这是一个问题。
我们也可以使用所有必需的覆盖方法实现自己的布局,但是我们可以覆盖的所有方法都标有@hide 注释,并且没有可以通过反射访问的字段。
下一个屏幕截图显示为 2x 缩放
PS:任务的上下文是一个带有捏拉缩放编辑文本的编辑器。计算大小的文本重新布局不是解决方案。因为我需要每个屏幕尺寸的便携式文档。
【问题讨论】:
-
请考虑格式化那堵文字墙。读起来不太容易。
-
对不起,@Avanz。现在我不能接受你的解决方案,因为不能批准未检查的解决方案。至于我,很多跨度都有公制的影响。我也有很多自定义跨度,所以在这个解决方案中我应该覆盖每个跨度以返回缩放大小。我有 22 个自定义跨度、字符和段落。首先,我会尝试您的解决方案,然后解决方案将被接受。
-
好的。有你的时间,试一试。有任何事情请告诉我。
-
此功能移至第二版。实际日期是八月。
标签: java android editor pinchzoom spanned