2017-08-22 11 views
3

Je suis Noob dans android. Mon problème à propos de la hauteur utilisable des appareils 18: 9. Lorsque j'essaie d'obtenir un écran utilisable dans ces proportions, mon application est en train de réveiller tous les appareils Android, mais quand je compile sur Samsung Galaxy s8 ça ne marche pas. J'essaye d'obtenir l'écran utilisable des dispositifs. je l'ai déjà méthode éprouvée qui, dans ces liensHo pour obtenir s8 écran utilisable android?

https://stackoverflow.com/questions/43628047/how-to-support-189-aspect-ratio-in-android-apps

https://android-developers.googleblog.com/2017/03/update-your-app-to-take-advantage-of.html

Et j'utilise dynamiquement

DisplayMetrics metrics = this.getResources().getDisplayMetrics(); width = metrics.widthPixels; height = metrics.heightPixels ;

et moi avons essayé

private int getSoftButtonsBarHeight() { 
     // getRealMetrics is only available with API 17 and + 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      DisplayMetrics metrics = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(metrics); 
      int usableHeight = metrics.heightPixels; 
      getWindowManager().getDefaultDisplay().getRealMetrics(metrics); 
      int realHeight = metrics.heightPixels; 
      if (realHeight > usableHeight) 
       return realHeight - usableHeight; 
      else 
       return 0; 
     } 
     return 0; 
    } 

Et quand j'essaie de paramétrer la hauteur de MATCH_PARENT, ça marche bien. Mais j'ai besoin de trouver un pixel de hauteur utilisable pour dessiner mes autres vues proportionnellement.

Actuellement, ce code DisplayMetrics metrics = this.getResources().getDisplayMetrics(); height = metrics.heightPixels ; fonctionne dans mon activité mais lorsque j'essaie de l'utiliser dans une autre fenêtre que j'étend depuis FramaLayout et ajouter à l'activité, cela ne fonctionne pas.

Voici mon bloc de code

public class StudentLoginActivity extends Activity { ... 
    FrameLayout.LayoutParams containerParams = new ScrollView.LayoutParams(width, height-sb); 
    container = new FrameLayout(this); 
    container.setLayoutParams(containerParams); 
    container.setBackgroundColor(Color.rgb(248,248,248)); 
    loginStudentView = new StudentLoginView(this); 
    container.addView(loginStudentView); ... 

}

public class StudentLoginView extends FrameLayout { ... 
    FrameLayout.LayoutParams cp = new FrameLayout.LayoutParams(width, height); 
    setLayoutParams(cp); ... 

}

Mais ce problème lié à Android navigationBar hauteur parce que quand je montre la barre de navigation il n'y a pas de problème, mais si je hide navigationBar il n'est pas redimensionner l'application fonctionne toujours qu'il y a une barre de navigation à l'écran (mais je cache le navigationBar).

Mon problème est très similaire ce lien

android Navigation Bar hiding and persantage of usable screen overlap

+0

Qu'appelez-vous la hauteur utile? – Juan

+0

Le deuxième lien est collé à tort. – Juan

Répondre

0

Si vous avez une vue qui est réglé pour correspondre à la largeur de parent et de la hauteur (tout l'écran), vous pouvez attacher un écouteur à cette vue et ensuite obtenir sa largeur et sa hauteur.

View myView = findViewById(R.id.my_view); 
myView.addOnLayoutChangeListener(new OnLayoutChangeListener() { 

     @Override 
     public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, 
       int oldBottom) { 
      // its possible that the layout is not complete in which case 
      // we will get all zero values for the positions, so ignore the event 
      if (left == 0 && top == 0 && right == 0 && bottom == 0) { 
       return; 
      } 

      // Do what you need to do with the height/width since they are now set 
     } 
    }); 

This answer was taken from here.