Android — прослушиватель для отслеживания изменений в свойствах представления (например, android:layout_marginTop)

В Android вы можете создать прослушиватель для перехвата изменений в свойствах представления (ширина/высота/маржа/позиция относительно верхней части экрана)?

Я хочу инициировать событие, когда layout_marginTop="10dp" изменяется на другое значение.


person Jack    schedule 08.10.2013    source источник
comment
Вы можете попробовать OnLayoutChangeListener, но будьте осторожны: он слушает почти ВСЕ, а иногда делает это дважды :) И да, лучше поздно, чем никогда — так что привет из 2021 года ;)   -  person kazuser    schedule 13.05.2021


Ответы (1)


Как насчет реализации OnLayoutChangeListener, который вызывается при перемещении представления из-за изменения макета?

new View().addOnLayoutChangeListener(new OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
                    int oldTop, int oldRight, int oldBottom) {
        // TODO Auto-generated method stub  
    }
});

Выдержка из Android API:

Добавьте прослушиватель, который будет вызываться при изменении границ представления из-за обработки макета.

person chuck258    schedule 08.10.2013
comment
Спасибо за ваш ответ, но это не то, что я ищу. Я хочу слушать изменения ВСЕХ ДОСТУПНЫХ свойств представления (отступы, поля, ширина, высота, поворот, тег, видимость), а не только изменения свойств слева/сверху/справа/снизу. - person Jack; 08.10.2013
comment
Насколько я знаю, поле не принадлежит представлению. Он может содержаться в View.getLayoutParams или храниться только в родительском представлении. Однако: можно ли использовать производные классы представлений и добавить нужный слушатель? - person chuck258; 08.10.2013
comment
Можно использовать производные классы представления, если метод может быть реализован на нескольких производных классах представления (например, ImageView, TextView). Не проблема создать расширенные классы представлений всех производных классов представлений, для которых необходимо реализовать свойствоListener. Например: если мне нужно 2 представления (ImageView + TextView) с propertyListeners ->, я должен создать 2 пользовательских класса представления, которые расширяют ImageView и TextView. Для этих двух пользовательских представлений заданы свойстваListeners. - person Jack; 10.10.2013
comment
Его можно использовать для обработки вида Y, измененного в AdjustResize для обнаружения событий отображения/скрытия клавиатуры? - person ; 26.10.2018