Android中有一个类KeyboardView
,它使用内部类Canvas
,特别是方法Canvas.DrawText
。该方法只能绘制一行。我需要它画两条线。
在Java中可能以某种方式覆盖Canvas.DrawText
,以便KeyboardView
将使用覆盖方法?
是否有任何方法可以在不从头开始重写KeyboardView
的情况下实现所需的行为?
答案 0 :(得分:1)
您必须覆盖KeyboardView
类的Canvas
类方法,以便创建类的实例。
在KeyboardView
类中,只有方法onBufferDraw
使用画布,并且它也会对其进行实例化。不好的是,这种方法非常大。
答案 1 :(得分:1)
如果类没有提供指定Canvas子类的方法,或者它没有提供行为扩展点,那么不是,但是:完整重写不太可能是必要的,如果你的目标是特定的功能。
相反,将视图子类化,并仅重新实现您需要更改的功能,并使用您的视图子类。
答案 2 :(得分:1)
如果Canvas
中实际存在另一个KeyboardView
实例,则必须直接扩展KeyboardView
类。 (public class MyFancyKeyboardView extends KeyboardView
)
但是,看起来它有一个View.onDraw(Canvas)
方法的实现,该方法由框架调用,并提供了外部Canvas
。如果您可以将其包装在自己的View
内,则可以提供自己的onDraw
来调用KeyboardView
的<{1}}。
private KeyboardView wrappedKeyboardView;
public void onDraw (Canvas canvas) {
wrappedKeyboardView.onDraw (canvas);
doMoreDrawing (canvas);
}
(当然,请记住,每个Android设备都有可能有完全不同的键盘布局,所以我怀疑它是否特别有效或可移植......)