我有一个EditText
,我想要对它进行缩放和滚动,使用 setScaleX
/setScaleY
时可以正常工作——文字在正确的位置进行编辑。
但是当我尝试选择文本时,它绘制的选择句柄的位置就像文本没有缩放一样。这是已知的bug。
这是预期的结果,因为句柄是绘制在与视图大小相关联的弹出窗口上的。
所有针对 android.widget.Editor
的操作都针对其字段 private TextView mTextView;
进行的。如果我们通过反射设置自己的编辑器,我不知道该怎么处理私有方法,因为它们不能被覆盖。
此外,选择句柄是在弹出窗口的 android.widget.Editor.HandleView#HandleView
上绘制的,并且坐标是在 Layout 中计算的,但我们只需要 DynamicLayout
,但对于我们的目的来说,它并没有什么区别。
方法 android.text.Layout#getPrimaryHorizontal(int, boolean)
是公共的,它的值可以乘以比例,但为此我们需要扩展和重写私有方法 android.widget.TextView#makeSingleLayout
,但这是一个问题。
我们也可以实现自己的 Layout,并覆盖所有必需的方法,但我们可以覆盖的所有方法都带有 @hide
注释,而没有可以通过反射访问的字段。
下面是缩放了 2 倍的屏幕截图:
附:任务的上下文是具有捏合缩放编辑文本的编辑器。重新布局文本并计算大小不是一个解决方案,因为我需要在每个屏幕大小上使用可移植的文档。