2012-06-08 15 views
8

Esiste un metodo equivalente a Dialog.setOnShowListener() per la classe View in Android?Android - Richiede la richiamata quando viene visualizzato Visualizza

Mi serve perché quando chiamo getLocationOnScreen su una vista (dire foo) nella riga immediatamente successiva a someViewGroup.addView (foo), ottengo location = (0,0).

Non riesco a utilizzare alcun metodo del ciclo di vita dell'attività, perché l'aggiunta di foo è in esecuzione (premere un pulsante). Qualsiasi aiuto sarebbe molto apprezzato. Grazie in anticipo.

risposta

17

è necessario utilizzare un ViewTreeObserver:

someViewGroup.addView(foo)  

ViewTreeObserver vto = someViewGroup.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 

      ///getLocationOnScreen here 

      ViewTreeObserver obs = someViewGroup.getViewTreeObserver(); 
      obs.removeGlobalOnLayoutListener(this); 
     } 
    }); 
+0

Grazie! ha funzionato ! :) –

+0

@Zelleriation Ciao, ho provato ad usare la tecnica che hai suggerito, ma ancora, a volte ottengo (0,0) posizione, all'interno del callback .. qualche idea del perché questo sta accadendo? – Vlad

Problemi correlati