Comment déterminer de manière programmative quelle mise en page (mise en page-normale, mise en page-grande, etc.) mon application utilise actuellement? Je vois le getwindowManager (). GetDefaultDisplay (). GetMétrictrics (métriques) Appel, mais il semble que la densité de l'écran mais ne soit pas nécessaire quelle mise en page l'application utilise. J'ai besoin d'informations car j'ai besoin de modifier de manière programmative une partie du positionnement des vues de manière dynamique au moment de l'exécution. P>
Merci d'avance. P>
6 Réponses :
ViewGroup view = (ViewGroup)getWindow().getDecorView(); LinearLayout content = (LinearLayout)view.getChildAt(0); int id = content.getId(); The id tells you which layout you're using (assuming you set the id tag in the XML).
Hmmm. J'ai essayé avec ma vision de relativation: relativelayout content = (relativelayout) vue.getchildat (0); code> et il provoque une exception de caractères:
java.lang.classcastException: android.widget.frameLayout code>. Une idée pourquoi?
Je cherchais la même chose! J'ai trouvé 2 questions similaires / réponses:
Un moyen extrêmement facile de le faire, c'est en définissant un identifiant et une étiquette à la disposition parent et dans votre puis, dans votre Oncreate () code>, vous pouvez
wedervied () code> et < code> gettag () code>.
Oncreate code> méthode, p>
Vous devriez pouvoir ignorer le test de balise si vous donnez simplement la mise en page parent dans chacune des variations un identifiant différent.
J'ai eu le même problème. Si vous utilisez mise en page code> /
layout-sw600dp code> /
layout-sw720dp code>, les suivants ont pris fin à travailler pour moi:
Configuration config = activity.getResources().getConfiguration();
if (config.smallestScreenWidthDp >= 720) {
// sw720dp code goes here
}
else if (config.smallestScreenWidthDp >= 600) {
// sw600dp code goes here
}
else {
// fall-back code goes here
}
Oui, cela devrait être la réponse valide.
Le code suivant vous aidera. Je viens d'imprimer une catégorie de taille d'écran ou de densité correspondante. Vous pouvez faire ce que vous voulez!
//Determine screen size if ((getResources().getConfiguration().screenLayout &Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) { Log.d("Screen Size: ", "LARGE"); } else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) { Log.d("Screen Size: ", "NORMAL"); } else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) { Log.d("Screen Size: ", "SMALL"); } else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE) { Log.d("Screen Size: ", "XLARGE"); } else { Log.d("Screen Size: ","UNKNOWN_CATEGORY_SCREEN_SIZE"); } //Determine density DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int density = metrics.densityDpi; if (density==DisplayMetrics.DENSITY_HIGH) { Log.d("Screen Density: ","HIGH"); } else if (density==DisplayMetrics.DENSITY_MEDIUM) { Log.d("Screen Density: ","MEDIUM"); } else if (density==DisplayMetrics.DENSITY_LOW) { Log.d("Screen Density: ","LOW"); } else if (density==DisplayMetrics.DENSITY_XHIGH) { Log.d("Screen Density: ","XHIGH"); } else if (density==DisplayMetrics.DENSITY_XXHIGH) { Log.d("Screen Density: ","XXHIGH"); } else { Log.d("Screen Density: ","UNKNOWN_CATEGORY"); }
C'est une vieille question, mais je voudrais partager ma façon de résoudre ce problème. P>
Créer un valeurs - * em> variante correspondant à chaque configuration que vous souhaitez confirmer programmation, à l'intérieur duquel vous définissez les valeurs appropriées décrivant la configuration actuelle: p>
Comme vous pouvez le voir, la valeur booléenne is_landscape em> existe aussi bien dans valeurs em> et valeurs des terres em>, il est donc possible d'accéder en toute sécurité via R.bool.is_landscape em>. p>
La seule différence, cependant, est la valeur: p>
Remarque strong>: bien sûr qu'il est possible d'utiliser Il est important de comprendre que cette technique est polyvalent, en utilisant que l'on peut définir un répertoire des valeurs plus complexes de ressources (par exemple valeurs ldrtl-sw600dp-v23 em>) pour soutenir une configuration plus spécifique. p> getResources () getBoolean (R.bool.is_landscape).. Code> evalue
true code> en mode paysage, et
false code> sinon p>
getResources () getConfiguration () Orientation code> afin d'obtenir l'orientation de l'appareil en cours, bien que je choisi d'utiliser.. ce cas simple familier pour faire mon exemple clair et simple. p>