【问题标题】:Access to protected method in java (android)在java(android)中访问受保护的方法
【发布时间】:2019-08-18 10:59:55
【问题描述】:

我正在学习用 android studio 做应用程序。我正在构建一个数字选择器编程。我想调整我的 numberpiker 的大小。

为了调整我的数字选择器的大小,我在开发人员文档中找到了一个名为 onMeasure 的受保护方法。 https://developer.android.com/reference/android/widget/NumberPicker

NumberPicker p_myNumberPicker = new NumberPicker(this);
p_myNumberPicker.setMaxValue(150);
p_myNumberPicker.setMinValue(0);
p_myNumberPicker.onMeasure(100,100);
NumberPicker.OnValueChangeListener myValChangedListener = new NumberPicker.OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        p_number.setText(""+newVal);
    }

我的问题是我收到一条错误消息“onMeasure(int,int) has protected access in android.widget.NumberPicker”。 我该如何解决?

【问题讨论】:

    标签: android protected numberpicker


    【解决方案1】:

    只需阅读下面的method 文档,您就会发现:

    CONTRACT:重写此方法时,必须调用 setMeasuredDimension(int, int) 来存储此视图的测量宽度和高度。否则将触发由 measure(int, int) 抛出的 IllegalStateException。调用超类的 onMeasure(int, int) 是有效的。

    measure 的基类实现默认为背景大小,除非 MeasureSpec 允许更大的大小。子类应覆盖 onMeasure(int, int) 以更好地测量其内容。

    【讨论】:

      【解决方案2】:

      只需删除这一行:

      p_myNumberPicker.onMeasure(100,100);
      

      因为您违反了该方法的访问范围,该方法不应该这样称呼。如果你真的想调用它,你必须使用CustomNumberPicker extends NumberPicker,并在它的范围内调用这个protected 方法。只有这样访问范围才会匹配定义。

      【讨论】:

        【解决方案3】:

        这不是你调整大小的方式。事实上,错误地调用视图的 onMeasure 会严重破坏事情。由于您将其设置为固定大小,因此只需在定义小部件的 xml 中为其提供固定的宽度和高度。或者,如果在代码中定义它,请在其布局参数中使用固定的宽度和高度。

        【讨论】:

          猜你喜欢
          • 2020-07-26
          • 1970-01-01
          • 2014-10-31
          • 1970-01-01
          • 2016-07-19
          • 2011-09-18
          • 2011-08-14
          • 1970-01-01
          • 2014-12-19
          相关资源
          最近更新 更多