如何覆盖内部使用的类的方法?

时间:2011-12-22 14:52:06

标签: java android

Android中有一个类KeyboardView,它使用内部类Canvas,特别是方法Canvas.DrawText。该方法只能绘制一行。我需要它画两条线。

在Java中可能以某种方式覆盖Canvas.DrawText,以便KeyboardView将使用覆盖方法?

是否有任何方法可以在不从头开始重写KeyboardView的情况下实现所需的行为?

3 个答案:

答案 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设备都有可能有完全不同的键盘布局,所以我怀疑它是否特别有效或可移植......)