Ответ 1
Переопределите onSizeChanged в View
Dianne Hackborn упоминается в нескольких потоках, которые вы можете обнаружить, когда макет был изменен, например, когда открыта или закрывается мягкая клавиатура. Такой поток - это один... http://groups.google.com/group/android-developers/browse_thread/thread/d318901586313204/2b2c2c7d4bb04e1b
Однако я не понял ее ответа: "По вашей иерархии просмотров изменяются все соответствующие обходы и обратные вызовы макета".
Есть ли у кого-нибудь дополнительное описание или некоторые примеры того, как это обнаружить? Какие обратные вызовы можно связать, чтобы обнаружить это?
Спасибо
Переопределите onSizeChanged в View
Один из способов - просмотр. addOnLayoutChangeListener. В этом случае нет необходимости подклассифицировать представление. Но вам нужен уровень API 11. И правильный расчет размера из границ (недокументированный в API) иногда может быть ловушкой. Вот правильный пример:
public void onLayoutChange( View v, int left, int top, int right, int bottom,
int leftWas, int topWas, int rightWas, int bottomWas )
{
int widthWas = rightWas - leftWas; // right exclusive, left inclusive
if( v.getWidth() != widthWas )
{
// width has changed
}
int heightWas = bottomWas - topWas; // bottom exclusive, top inclusive
if( v.getHeight() != heightWas )
{
// height has changed
}
}
Другой способ (как ответы dacwe) - подклассировать ваше представление и переопределить onSizeChanged.
Мое решение состоит в том, чтобы добавить невидимый крошечный немой вид в конце макета/фрагмента (или добавить его как фон), поэтому любое изменение размера макета вызовет событие изменения макета для этого вида, которое могло бы быть нанятым OnLayoutChangeListener:
Пример добавления немого представления в конец макета:
<View
android:id="@+id/theDumbViewId"
android:layout_width="1dp"
android:layout_height="1dp"
/>
Слушайте событие:
View dumbView = mainView.findViewById(R.id.theDumbViewId);
dumbView.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) {
// Your code about size changed
}
});