java – Android:为什么我不能从视图覆盖setFrame?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Android:为什么我不能从视图覆盖setFrame?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2491字,纯文字阅读大概需要4分钟。
内容图文
![java – Android:为什么我不能从视图覆盖setFrame?](/upload/InfoBanner/zyjiaocheng/798/bdbb1841f4ac48a18635870e94f0db94.jpg)
只是尝试扩展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的文档.
查看文档:
定义setFrame的类
http://www.google.com/search?q=site:developer.android.com+%22boolean+setFrame%22
编辑:
正如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的方法:
http://www.androidjavadoc.com/?p=63
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:为什么我不能从视图覆盖setFrame?全部内容,希望文章能够帮你解决java – Android:为什么我不能从视图覆盖setFrame?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。