Dianne Hackborn a mentionné dans quelques discussions que vous pouvez détecter quand une mise en page a été redimensionnée, par exemple, lorsque le clavier virtuel s'ouvre ou se ferme. Un tel fil est celui-ci ... http://groups.google.com/group/Android-developers/browse_thread/thread/d318901586313204/2b2c2c7d4bb04e1b
Cependant, je n'ai pas compris sa réponse: "Par votre hiérarchie de vues étant redimensionnée avec tous les parcours et rappels de mise en page correspondants."
Quelqu'un a-t-il une description supplémentaire ou quelques exemples de la façon de détecter cela? À quels rappels puis-je me connecter pour détecter cela?
Merci
Remplacez onSizeChanged dans votre Voir !
Une façon est View . addOnLayoutChangeListener . Il n'est pas nécessaire de sous-classer la vue dans ce cas. Mais vous avez besoin de l'API niveau 11. Et le calcul correct de la taille à partir des limites (non documenté dans l'API) peut parfois être un piège. Voici un exemple correct:
view.addOnLayoutChangeListener( new View.OnLayoutChangeListener()
{
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
}
}
});
Une autre façon (comme le répond Dacwe) est de sous-classer votre vue et de remplacer onSizeChanged .
Ma solution est d'ajouter une petite vue muette invisible à la fin de la mise en page/fragment (ou de l'ajouter en arrière-plan), ainsi tout changement de taille de la mise en page déclenchera l'événement de changement de mise en page pour cette vue qui pourrait être rattrapée par OnLayoutChangeListener:
Exemple d'ajout de la vue muette à la fin de la mise en page:
<View
Android:id="@+id/theDumbViewId"
Android:layout_width="1dp"
Android:layout_height="1dp"
/>
Écoutez l'événement:
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
}
});
Merci à https://stackoverflow.com/users/2402790/michael-allan c'est le moyen simple et efficace si vous ne voulez pas remplacer toutes vos vues. Comme Api a évolué, je suggère plutôt ce copier-coller:
String TAG="toto";
///and last listen for size changed
YourView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v,
int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
boolean widthChanged=((right-left)!=(oldRight-oldLeft));
if( widthChanged )
{
// width has changed
Log.e(TAG,"Width has changed new width is "+(right-left)+"px");
}
boolean heightChanged=((bottom-top)!=(oldBottom-oldTop));
if( heightChanged)
{
// height has changed
Log.e(TAG,"height has changed new height is "+(bottom-top)+"px");
}
}
});