2016-07-23 2 views
2

J'essaie d'obtenir la largeur en pixels/hauteur de l'appareil pour placer des éléments et des événements tactiles de cartographie sur l'écran, mais ne pas obtenir l'effet désiré au ras du bas à droite):Android getDisplayMetrics() ne renvoie pas la taille d'affichage exacte

White square should be flush in the lower right corner

// screen size 
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); 
    float ScrDensity = metrics.density; 
    int metricHeight = metrics.heightPixels;// 
    int metricWidth = metrics.widthPixels;// 

    Log.i("AllMetrics", metrics.toString()); 

    // temp 
    int rightButton_diameter = 100; 
    int rightButton_xpos = metricWidth - rightButton_diameter; 
    int rightButton_ypos = metricHeight - rightButton_diameter; 

Où AllMetrics retourne:

DisplayMetrics{density=2.0, width=720, height=1184, scaledDensity=2.0, xdpi=320.0, ydpi=320.0} 

Je remarque que le retou rned height est également différent du 720x1280 listé dans le Virtual Device Manager (API 19, Android 4.4) et les positions x/y des événements tactiles semblent précises pour les éléments dessinés (c'est-à-dire que la zone cliquable du bouton est la même que il est dessiné)

Est-ce une erreur de configuration ou suis-je en utilisant la méthode incorrecte de récupération de la position de l'écran?

+1

hauteur = 1184 car il n'inclut pas la hauteur de la barre d'état qui est de 96, ces deux nombres ajoutés ensemble donnent 1280 qui est la hauteur de l'écran physique – pskink

+0

BTW que voulez-vous exactement atteindre? – pskink

+0

Juste placer les choses sur l'écran pour les débutants. Je remarque que si je dessine à partir de 0,0, il est aligné avec le coin supérieur gauche. La barre d'état ne devrait-elle pas compenser cela par 69? Sinon, il manque juste la hauteur du fond plutôt que le haut. – Gavin

Répondre

2

Vérifiez ce code, il fonctionne pour moi

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 
int width = dm.widthPixels; 
int height = dm.heightPixels; 

En dehors de l'activité que vous pouvez essayer cette

((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm) 
+1

Ma compréhension est que getWindowManager() ne peut pas être utilisé en dehors de l'activité principale? (et renvoie en effet 'ne peut pas résoudre la méthode' quand j'essaie de l'utiliser) Excuses si je me trompe. C'est mon premier furore dans les dev Android. – Gavin

+1

si vous voulez utiliser l'activité extérieure le contexte de l'activité de passe ... bonne chance. –

+0

Est-il alors simplement accédé comme une méthode du contexte d'activité principal? Utilisation: this.mainActivityContext.getWindowManager(). GetDefaultDisplay(). GetMetrics (dm); renvoie le même problème, getWindowManager() non résolu. – Gavin

0

Pour accéder aux membres de DisplayMetrics, initialiser un objet comme celui-ci:

DisplayMetrics metrics = new DisplayMetrics(); getWindowManager(). GetDefaultDisplay(). GetMetrics (métriques);

+1

ne fonctionne pas en dehors de l'activité principale. – Gavin