Доступ к защищенному методу в Java (Android) - PullRequest
0 голосов
/ 27 марта 2019

Я учусь делать приложения с Android Studio.Я строю программирование сборщиков номеров.Я хочу изменить размер моего Numberpiker.

Чтобы изменить размер моего Numberpicker, я нашел защищенный метод 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».Как я могу это исправить?

Ответы [ 3 ]

0 голосов
/ 27 марта 2019

просто удалите эту строку:

p_myNumberPicker.onMeasure(100,100);

, потому что вы нарушаете область доступа к методу, который не должен называться так.если вы действительно хотите вызвать его, вы должны использовать CustomNumberPicker extends NumberPicker и вызывать этот метод protected изнутри.только тогда область доступа будет соответствовать определению.

0 голосов
/ 27 марта 2019

Это не то, как вы меняете размеры. На самом деле неправильное обращение к onMeasure представления серьезно сломает вещи. Поскольку вы делаете его фиксированным размером, просто задайте ему фиксированную ширину и высоту в xml, который определяет виджет. Или, если вы определяете его в коде, используйте фиксированную ширину и высоту в параметрах макета.

0 голосов
/ 27 марта 2019

Просто прочитайте ниже документацию по методу , и вы найдете:

CONTRACT : при переопределении этого метода вы должны вызвать setMeasuredDimension (int, int) сохранить измеренную ширину и высоту этого вида.Невыполнение этого условия вызывает исключение IllegalStateException, выбрасываемое по мере (int, int).Вызов суперкласса onMeasure (int, int) является допустимым использованием.

Базовая реализация меры класса по умолчанию имеет размер фона, если только MeasureSpec не разрешает больший размер.Подклассы должны переопределять onMeasure (int, int) для обеспечения лучшего измерения их содержимого.

...