android 视图覆盖,java – Android:为什么我不能从视图覆盖setFrame?

只是尝试扩展View并做一些自定义工作,但是当我尝试覆盖setFrame方法时Eclipse会抱怨.声称父类中没有方法可以覆盖:

The method setFrame(int, int, int, int) of type Test must override or implement a supertype method

这是android SDK源码方法的签名.

protected boolean setFrame(int left, int top, int right, int bottom)

正如你所看到的那样,它不是私有的或包级别的,甚至被指定为最终的……只是受到保护.这应该意味着我完全能够在子类中覆盖它.对?以下是我在Eclipse中尝试做的最低限度.也许这只是一个Eclipse错误,但我不太熟悉使用Ant来检查它.

编辑:对于那些回答未在View类中定义setFrame的人,我可以向你保证.你怎么认为我有方法签名?甚至在layout()期间调用它.还是我真的只是疯了?

git HEAD:View.java

蛋糕(1.5r4):View.java

您甚至可以在ImageView和TextView课程中看到正在覆盖的方法……这就是为什么我很难弄清楚为什么我不能直接从View中覆盖它…

public class Test extends View {

public Test(Context context) {

super(context);

}

public Test(Context context, AttributeSet attrs) {

super(context, attrs);

}

public Test(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

@Override

protected boolean setFrame(int left, int top, int right, int bottom) {

return super.setFrame(left, top, right, bottom);

}

}

解决方法:

根据文档,setFrame没有在View类中定义(严格来说不是真的 – 请参阅编辑).令人惊讶的是,每个子类TextView和ImageView都自己定义它.您必须为要覆盖此行为的每个窗口小部件扩展特定子类.这是基于Android 2.3 r1 – 05 Jan 2011 12:43的文档.

查看文档:

编辑:

正如OP在注释中指出的那样,该方法在View.java源代码中明确定义.但是,文档的行为就像在那里没有定义方法一样.

原因是View中的setFrame()方法具有@hide Javadoc标记:

/**

* Assign a size and position to this view.

*

* This is called from layout.

*

* @param left Left position, relative to parent

* @param top Top position, relative to parent

* @param right Right position, relative to parent

* @param bottom Bottom position, relative to parent

* @return true if the new size and position are different than the

* previous ones

* {@hide}

*/

protected boolean setFrame(int left, int top, int right, int bottom) {

显然,这隐藏了Javadoc的方法:

The especial [sic] attention is need to turn to the @hide tag which standard doclet can’t interpret and which hides non-SDK source and thus this code shouldn’t be used in applications.

是否有可能无法覆盖的原因是Android或Android编译器的Eclipse插件以某种方式强制执行@hide标记?我不知道.

标签:java,android,inheritance,override,extension-methods

来源: https://codeday.me/bug/20190621/1256250.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值