对子类不可见的受保护字段

2022-09-03 12:18:47

我正在编写一个直接扩展的自定义视图。如果我尝试访问字段 或 ,我会看到一个错误,指出该字段“无法解析或不是字段”。android.view.View 的源代码声明了 mScrollX、mScrollY 和类似的变量。为什么我的直接子类无法访问其父类的受保护字段?(像ScrollView这样的类显然可以。android.view.ViewmScrollXmScrollYprotected

P.S. 我意识到我可以打电话,但我想更新这些字段;打电话有我不想要的副作用。getScrollX()setScroll()


答案 1

这是因为它们不是Android SDK的一部分。

以下是以下各项的源代码:mScrollX

/**
 * The offset, in pixels, by which the content of this view is scrolled
 * horizontally.
 * {@hide}
 */
@ViewDebug.ExportedProperty(category = "scrolling")
protected int mScrollX;

您会注意到注释。这意味着这不是Android SDK的一部分。创建 Android SDK 的构建过程的部分不会在您正在编译的文件中的存根版本中包含此数据成员。@hideandroid.view.Viewandroid.jar

注释用于出于内部目的需要公开或受保护的内容,但不被视为 SDK 开发人员应该使用的内容。@hide

请为您遇到的任何问题找到其他解决方案。


答案 2

这很简单:请注意这些变量上方的@hide注释。这是一个特定于 Android 的注释,用于从公共 SDK 中隐藏字段/方法。这就是您无法直接访问它们的原因。

Romain Guy在这篇文章中提到了这一点。


推荐