访问java中的受保护方法(android)

问题描述 投票:0回答:3

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

为了调整我的数字选择器的大小,我在开发人员文档中找到了一个名为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)在android.widget.NumberPicker中有受保护的访问权限”。我该如何解决?

android protected numberpicker
3个回答
0
投票

请阅读下面的method文档,你会发现:

合同:重写此方法时,必须调用setMeasuredDimension(int,int)来存储此视图的测量宽度和高度。如果不这样做将触发由measure(int,int)抛出的IllegalStateException。调用超类'onMeasure(int,int)是一种有效的用法。

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


0
投票

只需删除此行:

p_myNumberPicker.onMeasure(100,100);

因为你违反了方法的访问范围,这并不意味着被称为相似的。如果你真的想要调用它,你必须使用CustomNumberPicker extends NumberPicker,并在它的范围内调用这个protected方法。只有这样,访问范围才能与定义相匹配。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.