2016-10-21 2 views
2

Dans notre application, nous devons déterminer la largeur de l'écran au démarrage. Nous avons essayé d'obtenir cette largeur en utilisant quelques méthodes différentes (voir la liste ci-dessous), mais les appareils Samsung, en particulier leurs appareils Galaxy, nous donnent parfois des valeurs incorrectes.Périphériques Samsung signalant par intermittence une largeur d'écran incorrecte

Nous avons un Galaxy s6 avec une résolution de 1440 x 2560 pixels. La plupart du temps, le dispositif signale une largeur de 1440, mais parfois il nous donnera une largeur de 1080.

Nous avons essayé d'obtenir la largeur de la façon suivante:

1)

getResources().getDisplayMetrics().widthPixels; 

2)

WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 

3)

WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 
Point size = new Point(); 
display.getRealSize(size); 

Mais dans tous les cas, nous voyons une largeur incorrecte renvoyée. Nous voyons des valeurs incorrectes de manière fiable lorsque notre application est lancée pour la toute première fois. Toute aide serait grandement appréciée.

+0

Bien, si vous connaissez la taille à l'avance pour certains modèles, pourquoi avez-vous besoin de l'interroger et ne pas avoir une sorte de table de recherche ou quelque chose? – PmanAce

+0

Oui, nous pourrions le faire mais maintenir cette liste massive n'est pas idéal. –

+0

Oui, je sais, je parlais juste des quelques cas problématiques comme celui-ci. Mais si quelqu'un trouve une solution, utilisez-la.:) – PmanAce

Répondre

0

Avez-vous essayé?

DisplayMetrics displayMetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
int screenWidth = metrics.widthPixels; 

MISE À JOUR

Et un peu hardcore. Vous pouvez trouver plus here.

+0

Je n'ai pas encore essayé cette méthode, mais je vais essayer maintenant. J'ai utilisé ces autres posts, mais ils ne nous ont pas encore réussi. –

+0

@JesseBuss bonne chance! –

+0

Malheureusement, nous voyons toujours l'erreur avec cette méthode. –

0

Ceci est notre méthode getDeviceWidth() pour les âges et nous n'avons jamais eu aucun problème avec elle, mais je suppose que c'est votre deuxième version ?! Veuillez vérifier et commenter. (Assurez-vous de cette fonction après vos vues sont créées.)

public static int getDeviceWidth(Activity activity) { 

    Display display = activity.getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    return size.x; 
} 

Sinon, j'essayer d'obtenir la position y (ou largeur) d'une mise en page factice qui a définit sa largeur à match_parent.

Et testez votre getWidth au démarrage et après que l'application est en cours d'exécution (par exemple, cliquez sur le bouton). Renvoie-t-il une mauvaise largeur pendant l'exécution?

+0

Oui, nous avons utilisé cette méthode sans succès. Nous appelons cette méthode dans onCreate() de notre application. –

+0

n'est-ce pas trop tôt? parce que les vues ne sont pas encore rendues. Cela arrive dans 'onCreateView'. c'est pourquoi je recommande d'appeler votre méthode pendant l'exécution, pour s'assurer que ce n'est pas le problème – longilong

0

Dans ma méthode, je n'ai pas rencontré de problèmes avant de ne pas trouver le bon emplacement de quelque chose ou la taille exacte de tout écran Android.

Ma méthode trouve la taille de l'écran en pouces et la hauteur de l'écran et la largeur en pixels et pouces

Dans mon application cette méthode est de savoir comment vérifier si mon application est utilisée par une tablette:

private void tabletChanges() { 
    DisplayMetrics dm = new DisplayMetrics(); 
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm); 
    int width = dm.widthPixels; 
    int height = dm.heightPixels; 
    int dens = dm.densityDpi; 
    double wi = (double)width/dm.xdpi; 
    double hi = (double)height/dm.ydpi; 
    double x = Math.pow(wi,2); 
    double y = Math.pow(hi,2); 
    double screenInches = Math.sqrt(x+y); 

    if(screenInches >= 7){ 
     //Do certain things 
    } 
}