我想自定义在Android中绘制CalendarView的方式。以下是CalendarView.java在AOSP源代码中的外观:
public class CalendarView extends FrameLayout{
private class WeekView extends View{
protected void onDraw(..){
drawBackground(..);
drawWeekNumbersAndDates(..);
drawWeekSeparators(..);
drawSelectedDateVerticalBars(..);
}
private void drawBackground(..){..}
private void drawWeekNumbersAndDates(..){..}
private void drawWeekSeparators(..){..}
private void drawSelectedDateVerticalBars(..){..}
}
}
由于相关位被声明为私有,我不能只扩展/覆盖它们(或者我可以吗?)。复制整个源文件然后进行更改可能会有问题,因为该文件是我不拥有的包(android.widget)的一部分。
答案 0 :(得分:4)
标准首要任务绝对不可能。私有成员甚至没有继承所以在子类中“覆盖”它们的概念没有任何意义。
在你的情况下,作家决定将这个课堂私有化。它可能不方便您的特定目的,但由于公共图书馆中可公开访问的所有内容自动成为其API的一部分,绑定其作者以保持其向后兼容性,因此制作任何特定代码都不是轻松的决定上市。作家们决定不采取这一步骤。
因此,在这种情况下,通过复制粘贴(如果可行)重用可能是实现目标的适当方法。这样做时要注意尊重图书馆许可证的条款。