2011-12-22 50 views
1

KeyboardView类在内部使用Canvas类,具体方法Canvas.DrawText机器人。该方法只能绘制一条线。我需要它画两条线。如何覆盖内部使用的类的方法?

Java可能会以某种方式覆盖Canvas.DrawText,这样KeyboardView将使用覆盖的方法?

有什么方法来实现requried行为无KeyboardView从头开始全部重写?

+0

你意味着[该类](http://www.devdaily.com/java/jwarehouse/android/core/java/android/inputmethodservice/KeyboardView.java.shtml)? – Yogu 2011-12-22 14:56:44

+0

是的,我的意思是那堂课。 – 2011-12-22 15:05:04

回答

1

如果在KeyboardView内部实际存在另一个Canvas实例,则必须直接扩展KeyboardView类。 (public class MyFancyKeyboardView extends KeyboardView

但是,它看起来像它有一个框架所调用的View.onDraw(Canvas)方法的实现,并提供了一个外部的Canvas。如果你能包你自己的View的里面,你也许能够提供自己onDraw调用了一个为KeyboardView

 private KeyboardView wrappedKeyboardView; 
    public void onDraw (Canvas canvas) { 
     wrappedKeyboardView.onDraw (canvas); 
     doMoreDrawing (canvas); 
    } 

(请记住,当然,每一个Android设备容易有一个完全不同的键盘布局,所以我怀疑,在它是特别有效或便携式绘图...)

+0

关于你对键盘布局的点评:KeyboardView类是用于定义了自己的布局定制键盘类似的组件一个奇怪的内置。它与系统键盘无关。例如,它经常用于计算器应用程序。 – 2011-12-22 18:45:37

+0

Bah,对不起,我误解了O :-)在任何情况下我都没有惹过它。只是根据我的答复,在班级的签名和一般猜测... – BRFennPocock 2011-12-22 19:06:04

1

您将不得不重写KeyboardView的方法,该方法使Canvas类实例化,以使其创建类的实例。

KeyboardView类中,只有方法onBufferDraw使用画布,并且它也立即生效。很不好,这种方法非常大。

1

如果该类不提供一种方式来指定一个Canvas的子类,或者如果它不提供行为扩展点,那么没有,但是:一个重写不太可能是必要的,如果你瞄准特定的功能。

相反,子类的观点,只有重新实现你需要改变的功能,并使用您的视图子类。