【问题标题】:why does View.setLayoutParams can call ViewGroup.onSetLayoutParams which is protected?为什么 View.setLayoutParams 可以调用受保护的 ViewGroup.onSetLayoutParams?
【发布时间】:2015-06-04 03:37:10
【问题描述】:

当我在搜索 android 源代码时,我发现了一些我无法理解或无法忍受的东西。您可以在下面的框架源代码中看到所有 onSetLayoutParams:

./base/core/java/android/widget/Toolbar.java: protected void onSetLayoutParams(View child, ViewGroup.LayoutParams lp) {

./base/core/java/android/widget/GridLayout.java: protected void onSetLayoutParams(View child, ViewGroup.LayoutParams layoutParams) {

./base/core/java/android/widget/GridLayout.java: super.onSetLayoutParams(child, layoutParams);

./base/core/java/android/view/View.java: ((ViewGroup) mParent).onSetLayoutParams(this, params);

./base/core/java/android/view/ViewGroup.java: protected void onSetLayoutParams(View child, LayoutParams layoutParams) {

onSetLayoutParams 的每一个定义都会被处理,但是 View.setLayoutParams 会将其父级转换为 ViewGroup,然后调用 ViewGroup 的 onSetLayoutParams。我不认为这在 java 中是正确的,但所有的 android 似乎都运行得很好。

对不起我的英语不好。

【问题讨论】:

  • 该方法受保护,但我无法从继承的类中访问它。 =/
  • 因为它被标记为@hide,所以它没有包含在SDK中,也没有包含在android.jar中(所以你不能覆盖或调用它)。

标签: android android-layout layoutparams


【解决方案1】:

不知何故,我从这个页面找到了我的答案:In Java, difference between default, public, protected, and private

Java protected 似乎使该方法对这个包外的类不可见,在同一个包中,它是一个公共方法。

【讨论】:

    猜你喜欢
    • 2014-10-09
    • 2011-12-05
    • 2011-10-02
    • 2019-02-13
    • 2011-08-04
    • 2014-05-16
    • 2020-02-23
    • 1970-01-01
    相关资源
    最近更新 更多