8
votes

Trouver l'emplacement de vue (position) sur l'affichage (écran) dans Android

Je veux trouver la position de la vue sur l'écran d'affichage.

Pour le faire, j'utilise les méthodes telles que View.getft () code>, vue.getbottom () code>, vue.GetRight () code >, vue.gettop () code>. Mais malheureusement, toutes ces méthodes sont retournées 0 code>.
Y a-t-il un moyen alternatif de trouver les positions de la vue (c.-à-d. Coordonnées à l'écran)? P>

Ma mise en page main.xml code>: p> xxx pré> Et ma classe a ceci dans Oncreate () Code>: P>

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());


1 commentaires

Ici, j'ai fondé la réponse. [Obtenez des coordonnées de la vue] [1] [1]: Stackoverflow.com/Questtions/2224844/...


5 Réponses :


2
votes

Je ne suis pas sûr que vous puissiez obtenir la position de la vue avant que la phase de mise en page ait été effectuée. Une fois que la vue est posée, vous pouvez utiliser getLocationVendoncreen pour obtenir la position de la vue. gettop et similaire ne renvoie que la position de la vue dans son parent.


0 commentaires

6
votes

Utilisez le getleft () , getdright () , gettop () et getbottom () . Ceux-ci peuvent être utilisés après la vue instanciée.


2 commentaires

Ces méthodes donnent la position de vue par rapport à Son parent.


@Ilkinulas alors quelle est la solution pour le par rapport à l'appareil?



3
votes

Vous ne pouvez vraiment pas obtenir la vue avant la main. Vous voudrez peut-être effectuer une application explicite à l'aide de invalidate () code> si possible ou que vous pouvez vérifier cela dans le olstresume () code> ou tinrésume () code> fonction.

Si vous essayez simplement des choses et que vous voulez vous amuser avec des threads, ce bloc de code mettra votre code sur le fil de l'interface utilisateur et attendra que tout soit rendu, puis affichez votre code: P>

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());
}


1 commentaires

getleft () , getdright () ne fonctionnera pas à chaque fois car ils renvoient la position relative au parent, pas à l'écran.



6
votes

Les méthodes que vous avez écrites suffisent à Trouvez l'emplacement à l'écran, mais l'endroit où vous avez écrit n'est pas correct.

Essayez d'écrire les méthodes (vue.getftft (), vue.getop (), etc.) dans Onwindowfocuschanged (Boolean Hardfocus ) méthode.

par exemple ...

** ** / p> xxx

** < p> Cela résoudra votre problème.


1 commentaires

C'est la réponse parfaite à cette question. + 1



8
votes

La manière la plus simple est de l'obtenir en utilisant View.getLocationVoyonsCreen (); ou GetLocationInwindow ();

Et si vous OUIRE POSITION Relatif sur la racine Layou t puis voir < / a>


0 commentaires