有KeyboardView
類在內部使用Canvas
類,具體方法Canvas.DrawText
機器人。該方法只能繪製一條線。我需要它畫兩條線。如何覆蓋內部使用的類的方法?
Java可能會以某種方式覆蓋Canvas.DrawText
,這樣KeyboardView
將使用覆蓋的方法?
有什麼方法來實現requried行爲無KeyboardView
從頭開始全部重寫?
有KeyboardView
類在內部使用Canvas
類,具體方法Canvas.DrawText
機器人。該方法只能繪製一條線。我需要它畫兩條線。如何覆蓋內部使用的類的方法?
Java可能會以某種方式覆蓋Canvas.DrawText
,這樣KeyboardView
將使用覆蓋的方法?
有什麼方法來實現requried行爲無KeyboardView
從頭開始全部重寫?
如果在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設備容易有一個完全不同的鍵盤佈局,所以我懷疑,在它是特別有效或便攜式繪圖...)
關於你對鍵盤佈局的點評:KeyboardView類是用於定義了自己的佈局定製鍵盤類似的組件一個奇怪的內置。它與系統鍵盤無關。例如,它經常用於計算器應用程序。 – 2011-12-22 18:45:37
Bah,對不起,我誤解了O :-)在任何情況下我都沒有惹過它。只是根據我的答覆,在班級的簽名和一般猜測... – BRFennPocock 2011-12-22 19:06:04
您將不得不重寫KeyboardView
的方法,該方法使Canvas
類實例化,以使其創建類的實例。
在KeyboardView
類中,只有方法onBufferDraw
使用畫布,並且它也立即生效。很不好,這種方法非常大。
如果該類不提供一種方式來指定一個Canvas的子類,或者如果它不提供行爲擴展點,那麼沒有,但是:一個全重寫不太可能是必要的,如果你瞄準特定的功能。
相反,子類的觀點,只有重新實現你需要改變的功能,並使用您的視圖子類。
你意味着[該類](http://www.devdaily.com/java/jwarehouse/android/core/java/android/inputmethodservice/KeyboardView.java.shtml)? – Yogu 2011-12-22 14:56:44
是的,我的意思是那堂課。 – 2011-12-22 15:05:04