IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Comment faire choisir mon application entre le mode paysage et le mode portrait ?


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Par défaut Comment faire choisir mon application entre le mode paysage et le mode portrait ?
    bonjour à tous.

    Je débute en prog android, et je cherche le moyen de faire tester la taille du terminal utilisé, afin de savoir si elle doit afficher en portrait ou paysage.
    Je m'explique, le CDG est le suivant : si c est une tablette, alors on passe en mode paysage, si c'est un smartphone, elle passe en mode portrait. Ceci n'est pas réciproque.
    Alors après avoir passé la journée à chercher, j'ai bien quelques pistes, j'ai vu que je pouvais créer un layout destiné spécialement au landscape si je le désire afin d 'affiner mon interface dans ce mode.
    J'ai également vu une façon de procéder qui met en place la création d'une classe spéciale qui décide si l'orientation est en paysage ou portrait, avec un peu de code a ajouté dans ma Main classe pour le test d'orientation du terminal.
    Mais moi je ne veux pas cela. J'aimerais un moyen de tester si la résolution de mon écran est au dessus de 6 pouces ( ce qui du coup en fait une tablette) ou en dessous ce qui en fait un smartphone (ouais je sais je suis trop fort ^^).
    Je pense devoir placer cela dans le " onCreate" dans mon activité principale, je chauffe ?
    je me mélange un peu les pinceaux, mais je suis un grand débutant, je comprends ce que je lis mais ne parviens pas encore à "créer" ce genre de choses, du coup la structure même de la méthode à appliquer me reste obscure .
    Une âme charitable pour m'éclairer ?
    svp, ne m'envoyez pas sur d'autres sujets traitant " à peu près " ma question, j'y ai passer 8h, j'en suis revenu brocouille :/
    j'ai visité plusieurs site, ils traitent tous de l'orientation mais sans jamais définir un état en "dur" selon la taille de la machine ou doit s'exécuter l'appli.
    Merci beaucoup par avance, des coups de mains, indices et idées.
    Daekyn, apprenti sorcier.

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    public class A1 extends Activity {
     
     
        //Méthode pour tester la surface d'affichage
        public boolean isTablet(Context context) {
             return (context.getResources().getConfiguration().screenLayout
                & Configuration.SCREENLAYOUT_SIZE_MASK)
                >= Configuration.SCREENLAYOUT_SIZE_LARGE;
         }
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (isTablet(this)) { 
                 setContentView(R.layout.un_joli_layout_pour_tablette);
            } else {
                 setContentView(R.layout.un_joli_layout_pour_smartphone);
            }
        }
     
    }
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Par défaut
    Merci d'avoir répondu si vite !
    Quand je vois la simplicité de votre code, je me dit que j'ai encore bien du chemin à faire pour arriver à créer ce genre de chose naturellement ^^.
    L'utilisation du booléen était pourtant logique, il y avait deux états, tablette/tel.
    juste une petite confirmation :
    (Bundle savedInstanceState) , ceci enregistre l'état de l activité avant la faire passer d un mode d'affichage à l'autre car, pour passer à un autre mode d'affichage, android détruit la vue précédente c'est bien ça ?
    je ne peux malheureusement pas tester cela tout de suite, je vous assure un retour trés rapide sur les difficultés que j'aurai pu ( ou pas) rencontrer !
    Encore merci.
    Daekyn

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Pour la gestion de l'orientation ainsi que tablet/téléphone android propose tout ce qu'il faut.

    1- Les dossiers de ressources.

    Au maximum tu dois utiliser les dossiers de ressources et éviter les conditions dans le code pour une évidente raison de clareté du code.
    Par défaut :
    /res/layout => va correspondre à un téléphone ou une tablette en portrait
    /res/layout-land => va correspondre au interface téléphone en paysage
    /res/layout-sw600dp-land => tablette 7"en paysage
    /res/layout-sw720dp-land => tablette 10" en paysage

    Tu peux aussi définir des dossiers spécifiques pour tablette en portrait , bref tout est possible. Voir la doc pour toutes les possibilités :
    http://developer.android.com/guide/p...s_support.html

    2- Dans le code

    Malgré tout , il arrive que l'on est besoin dans le code de différencier tablette et téléphone par exemple.
    Pour celà la solution la plus simple est encore d'utiliser les dossier de ressources.

    Par exemple dans :
    res/values/config.xml tu déclares :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <resources>
        <bool name="isTablet">false</bool>
    <resources>
    et dans res/values-sw600dp/config.xml tu déclares :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <resources>
        <bool name="isTablet">true</bool>
    <resources>
    Ne te reste alors plus qu'à définir une constante basée sur cette valeur. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MyApp extends Application
    {
    	public static boolean IS_TABLET = false;
     
    	public void onCreate() {
    		MyApp.IS_TABLET = getResources().getBoolean(R.bool.isTablet);
    	}
    }
    N'importe ou dans ton code , tu peux ensuite tester si tu es sur un téléphone ou une tablette :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(MyApp.IS_TABLET) {
        //Tablette
    } else {
       //T2léphone
    }
    Tu peux évidemment utiliser la même astuce pour savoir si tu es dans un layout en portrait ou en paysage.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Par défaut ca ne fonctionne pas dans un des deux cas .
    je reviens vers vous car j ai essayer vos solutions mais :

    -"il" ne passe pas dans la boucle qui deterlmine si ce st une tablette ou un tel
    -res/values/config.xml et res/values-sw600dp/config.xml , n'apparaissent pas, meme si je créer les deux layout correspondant.
    - je ne dois pas bloquer l'orientation dans le manifeste car cela bloque l appli en landscape a la fois en tel ET en tablette.
    -j'ai testé le booléen, la modif du manifest, j'ai même réussi a créer un toaster qui affiche la vraie résolution du terminal affiché dans l émulateur histoire d être sur que je n'ai pas de bug de ce coté.
    -j'ai testé de modifier directement les fichiers layouts (xlarge et normal) en insérant mon " activity " et en lui lui passant android: screenOrientation= " landscape" ( la mm avec le layout normal et portrait), mais évidement il m'envoie péter.

    Donc je reprends, je dois faire en sorte qu a la détection d une tablette ça verrouille en landscape, et si ça détecte un tel, ça verrouille en portrait, je ne dois pas choisr entre l'un et l'autre.
    Ha et petit plus qui fait plaisir, cette appli doit tourner au minimum sur honeycomb, ce qui veut dire que avant 3.2 le layout doit s appeler xlarge et après 3.2 il s appellera sw600dp.

    je vous met des captures d écran des différents éléments auxquels je fais référence. ainsi vous verrez que je ne me contente pas de demander, j'en chie sérieux pour une ridicule fonction, le coté positif c'est que du coup j'apprends très
    vite a force de recommencer ^^
    Nom : layouts.PNG
Affichages : 2282
Taille : 9,1 KoNom : layout sw660dp.PNG
Affichages : 2310
Taille : 48,3 KoNom : manifest.PNG
Affichages : 2302
Taille : 27,3 KoNom : on create.PNG
Affichages : 2330
Taille : 58,5 Ko

    voila je sais c est un peu le cirque , si l'un d'entre vous se sent chaud pour un partage d'écran via skype pour me faire un tuto en direct, j'en serai ravi, envoyez moi un petit message en privé ^^
    merci beaucoup d'avance

    Daekyn, l'apprenti sorcier, qui en chie mais ne lâchera rien

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Par défaut précision
    alors cela fonctionne pour les téléphones, l appli se charge bien en mode portrait en ne bouge pas, c'est pour les tablettes que ca ne marche pas, il considère toujours que ce n 'est pas une tablette, je suis obligé de placer un " return (true)" sur le booléen qui est sensé gérer ça, et la oui il passe en mode tablette ( landscape) , mais du coup c'est le mode téléphone qui disparaît ^^
    je vous met un screen de cette partie qui détecte la résolution et du coup devrait décider si c est une tablette ou un telephone
    Nom : booléen.PNG
Affichages : 2250
Taille : 24,9 Ko

    Re merci
    re Daekyn

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/02/2013, 13h29
  2. Réponses: 5
    Dernier message: 07/05/2007, 10h44
  3. Comment faire un retour ligne entre des " ??
    Par DrTank dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 09/05/2005, 09h35
  4. Réponses: 10
    Dernier message: 30/06/2004, 13h00
  5. Réponses: 6
    Dernier message: 14/05/2004, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo