2011-01-30 9 views
8

Desidero trovare la posizione della vista sullo schermo del display.Trovare la posizione della vista (posizione) sul display (schermo) in Android

Per farlo, utilizzo i metodi come view.getLeft(), view.getBottom(), view.getRight(), view.getTop(). Ma sfortunatamente, tutti questi metodi vengono restituiti 0.
C'è un modo alternativo per trovare le posizioni della vista (cioè le coordinate sullo schermo)?

mio layout main.xml:

<TextView android:id="@+id/tv1" 
    android:layout_width="200px" 
    android:layout_height="30px" 
    android:text="welcome to" /> 

<TextView android:id="@+id/tv2" 
    android:layout_width="200px" 
    android:layout_height="30px" 
    android:text=" Make Eit solution " /> 

E la mia classe ha questo in onCreate():

super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

tv1 = (TextView) findViewById(R.id.tv1); 
tv2 = (TextView) findViewById(R.id.tv2); 

System.out.println("tv4 width:"+tv2.getWidth()); 
System.out.println("tv4 height:"+tv2.getHeight()); 
System.out.println("Right:"+tv2.getRight()); 
System.out.println("Left:"+tv2.getLeft()); 
System.out.println("Top:"+tv2.getTop()); 
System.out.println("Bottom:"+tv2.getBottom()); 
+0

Qui ho fondato la risposta.[Get coordinate View] [1] [1]: http://stackoverflow.com/questions/2224844/how-to-get-the-absolute-coordinates-of-a-view – RajaRaviVarma

risposta

1

io non sono sicuro che si può ottenere la posizione della vista prima della fase di layout sono stati fatto. Una volta che la vista è a posto, è possibile utilizzare getLocationOnScreen per ottenere la posizione della vista. getTop e simili restituisce solo la posizione della vista nel suo genitore.

7

Utilizzare il getLeft(), getRight(), getTop() e getBottom(). Questi possono essere utilizzati dopo la creazione della vista.

+28

Questi i metodi danno la posizione della vista ** rispetto a ** il suo genitore. – ilkinulas

+0

@ilkinulas quindi qual è la soluzione per il relativo al dispositivo? –

3

Davvero non si può ottenere la vista prima mano. Si consiglia di fare un esplicito utilizzando, se possibile, invalidate() oppure è possibile controllare questo nella funzione onPostResume() o onResume().

Se stai solo cercando le cose e vogliono divertirsi con i thread, questo blocco di codice metterà il vostro codice sul thread dell'interfaccia utente e attenderà di tutto per essere reso e quindi visualizzare il tuo codice:

final View gv = this; 
ViewTreeObserver vto = gv.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @SuppressLint("NewApi") 
    public void onGlobalLayout() { 
     gv.getViewTreeObserver().removeGlobalOnLayoutListener(this); 

     tv1=(TextView)findViewById(R.id.tv1); 
     tv2=(TextView)findViewById(R.id.tv2); 
     System.out.println("tv4 width:"+tv2.getWidth()); 
     System.out.println("tv4 height:"+tv2.getHeight()); 
     System.out.println("Right:"+tv2.getRight()); 
     System.out.println("Left:"+tv2.getLeft()); 
     System.out.println("Top:"+tv2.getTop()); 
     System.out.println("Bottom:"+tv2.getBottom()); 
} 

Quest'ultimo è un sollevamento piuttosto pesante ma porterà a termine il lavoro. Di solito inserisco righe come questa nei miei log (android.util.Log)

5

i metodi che hai scritto sono sufficienti per trovare la posizione sullo schermo, ma il posto in cui hai scritto non è corretto.

provare a scrivere i metodi (view.getLeft(), view.getTop() ... ecc.) Nel metodo onWindowFocusChanged (boolean hasFocus).

per esempio ...

**

@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     super.onWindowFocusChanged(hasFocus); 
     if (hasFocus) { 
       System.out.println("Right:"+tv2.getRight()); 
       System.out.println("Left:"+tv2.getLeft()); 
       System.out.println("Top:"+tv2.getTop()); 
     } 
    } 

**

che possa risolvere il problema.

+1

Questa è la risposta perfetta a questa domanda. + 1 – mok

6

Il modo più semplice è quello di ottenere utilizzando View.getLocationOnScreen(); O getLocationInWindow();

E se si vuole posizione relativa alla radice Layou t poi See

Problemi correlati