У меня есть классРазница между addOnLayoutChangeListener и onLayout (изменена)?
public class FancyView extends View implements View.OnTouchListener {
мне нужно, чтобы получить высоту/ширину зрения.
(Это может измениться, скажем, вращение устройства. Кроме того, конечно, высота/ширина не известна во время инициализации.)
Вы можете сделать это ...
Таким образом, на самом деле в классе FancyView
просто переопределить onLayout(changed)
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
int hh = getHeight();
Log.d("~", "Using onLayout(changed), height is known: " +hh);
}
Или, вы можете сделать это ...
Снова в классе FancyView
использовать addOnLayoutChangeListener
private void init() {
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) {
Log.d("~", "Using addOnLayoutChangeListener, height is known: " +hh);
}
});
}
(За исключением:. Я думаю init()
это лучшее место, чтобы сделать это)
И, кажется, работает хорошо.
Есть ли какая-либо фактическая разница между (A) добавлением слушателя с addOnLayoutChangeListener
и поочередно (B) с переопределением onLayout(boolean changed
?
Использование: в пределах класса FancyView
Я рисую что-то поверх изображения; поэтому мне нужно знать ширину/высоту, какой размер рисовать.
Сноска. Я заметил, где бы ни обсуждалась проблема «Android, получить ширину/высоту обзора», часто предлагается использовать onWindowFocusChanged
9ах, поскольку это «проще»). Я действительно не понимаю, почему вы это сделаете, когда доступно onLayout (изменено); возможно, я что-то упустил.
Я согласен с вами в том, что метод addOnLayoutChangeListener - это метод, который нужно выполнить. Потому что целью слушателя является информирование другого процесса об изменении события. – ZeusNet
hi @ZeusNet; Спасибо за это. Скажите, вы случайно написали там неправильное? Поскольку, как вы говорите, подход «слушателя» относится к «другим процессам» - не было бы лучше просто использовать onLayout (изменено) здесь в классе? – Fattie
Привет @ joe-blow Я думаю, что использовал бы прослушиватель для обоих. Уведомление стажера и extern. Но это только мое предпочтение.OnLayout также может быть использован для этой нотации, но, на мой взгляд, лучше использовать слушателя, чтобы отделить внимание – ZeusNet