Java 如何重写内部使用的类的方法?
Android中有classJava 如何重写内部使用的类的方法?,java,android,Java,Android,Android中有classKeyboardView,它内部使用classCanvas,特别是方法Canvas.DrawText。这种方法只能画一条线。我需要它来画两条线 在Java中,有可能以某种方式覆盖Canvas.DrawText,以便键盘视图将使用覆盖方法 是否有任何方法可以实现所需的行为,而无需从头完全重写KeyboardView?您必须重写实例化Canvas类的KeyboardView方法,使其创建类的实例 在KeyboardView类中,只有方法onBufferDraw使用画布,并
KeyboardView
,它内部使用classCanvas
,特别是方法Canvas.DrawText
。这种方法只能画一条线。我需要它来画两条线
在Java中,有可能以某种方式覆盖Canvas.DrawText,以便键盘视图
将使用覆盖方法
是否有任何方法可以实现所需的行为,而无需从头完全重写
KeyboardView
?您必须重写实例化Canvas
类的KeyboardView
方法,使其创建类的实例
在
KeyboardView
类中,只有方法onBufferDraw
使用画布,并且它也实例化画布。糟糕的是,这个方法非常大。如果类没有提供指定画布子类的方法,或者如果它没有提供行为扩展点,那么就没有了,但是:如果您针对的是特定的功能,则不可能需要完全重写
相反,对视图进行子类化,只重新实现需要更改的功能,并使用视图子类。如果
KeyboardView
中实际上还有另一个Canvas
实例,则必须直接扩展KeyboardView
类。(公共类MyFancyKeyboardView扩展了KeyboardView
)
但是,它似乎有一个View.onDraw(Canvas)
方法的实现,该方法由框架调用,并提供了一个外部Canvas
。如果您可以将其封装在自己的视图中,您可能可以提供自己的onDraw
,该视图调用了键盘视图的视图
private KeyboardView wrappedKeyboardView;
public void onDraw (Canvas canvas) {
wrappedKeyboardView.onDraw (canvas);
doMoreDrawing (canvas);
}
(当然,请记住,每个安卓设备都可能有完全不同的键盘布局,因此我怀疑它是否特别有效或便携……)您的意思是什么?关于您对键盘布局的评论:KeyboardView类是一个奇怪的内置类,用于定义自己布局的自定义类键盘组件。它与系统键盘无关。例如,它经常用于计算器应用程序。呸,对不起,我误解了O:-)我没有在任何上下文中处理它。我的回答是基于全班同学的签名和一般猜测…