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 :

Ajustement automatique des proportions de texte


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut Ajustement automatique des proportions de texte
    Bonjour à tous,
    je poursuis mon auto-formation sous Android...

    Je suis en train de bosser sur le layout d'une activité. Il est essentiellement composé de TextViews et EditTexts. Je défini la taille du texte en "sp" mais je constate que suivant la définition du terminal utilisé ou suivant l'orientation, le rendu est carrément différent.
    Comment puis-je faire pour que la taille du texte s'ajuste automatiquement pour conserver le même aspect sur toutes les résolutions d'écran ?
    J'ai essayé d'utiliser l'attribut "weight" sur les textViews et EditViews, ça semble me conserver les emplacement sur l'écran mais pas la taille du texte...

    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut
    J'arrive à faire en sorte que la largeur des textviews et editviews s'adapte en fonction de la résolution et densité de l'écran en utilisant "android:layout_weight". Mais j'aimerais que la taille de la police s'adapte aussi pour remplir toute la largeur du textview. Et ensuite, sauf erreur de ma part, avec android:layout_height="wrap_content", la hauteur devrait s'ajuster d'elle-même.
    J'ai fouillé là : https://developer.android.com/refere.../TextView.html mais je ne crois pas avoir trouvé mon bonheur. Ou alors je suis passé à côté.
    J'ai vu "android:ems" mais je n'ai pas compris à quoi ça sert.
    Sinon j'ai pensé à mettre les paramètres de largeur et hauteur en "wrap_content" et la taille du texte dans différentes unités mais apparemment, peu importe l'unité, la place occupée par le texte demeure différente suivant la résolution de l'écran. (A moins que la preview d'Eclipse foire)

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Ben non c'est le bon moyen de faire.... utiliser "sp" pour la taille des TextView. Enfin tout dépend... si c'est pour afficher deux TextView accolés, un layout_weight (et 0dp de taille) et un gravity permet d'obtenir aussi de bons résultats.
    On a approximativement 160sp = 160dp = 1 pouce ... mais cette valeur peut varier selon le choix de l'utilisateur (qui peut vouloir une police plus ou moins grande pour des questions de conforts visuels).

    Les tailles de texte "par défaut" (textAppearanceSmall, Large, ...) sont adaptés à l'environnement Android, et prennent en compte les "recommandations" de taille.

    Ensuite le "wrap_content" dit à la view: prends la taille de ce que tu affiches... si c'est un texte ce sera donc la taille du texte.

    Il me semble que l'idéal est encore de calculer la taille de l'écran en pouces. Et d'adapter la "fonte" au niveau du thème en fonction de cela, mais ce devra être fait au niveau du code (il n'y a pas de selecteur de ressource basé sur la taille réelle de l'écran), *avant* les setContentView.

    Comme on ne sait pas exactement le but recherché, difficilement de donner plus de "pistes".

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut
    Merci pour tes réponses !

    En fait le but est assez basique, il s'agit d'une page où on entre des valeurs et ces valeurs génèreront un bulletin de paie dans une autre activité.
    je veux afficher 2 colonnes qui occupent tout l'écran et qui ont exactement la même largeur. Dans la colonne de gauche : des textviews les uns au dessous des autres (nbre d'heures sup, nbre de congés, etc...), dans la colonne de droite : des edittexts les uns au-dessous des autres.
    Pour le comportement de l'activité, à priori c'est bon, j'arrive bien à implémenter mon intent et les données circulent bien.

    Mon seul point bloquant : la mise en page.
    Je vais prendre des exemples. Sur un Galaxy S4 (qui doit avoir un écran 5" en 1080 si je me souviens bien) je fais en sorte que mes 2 colonnes remplissent tout l'écran. Mais admettons que le gars qui utilise l'appli est passablement hypermétrope, je voudrais qu'il puisse basculer son Galaxy S4 en orientation paysage pour bénéficier d'une plus grande largeur d'écran. Pour être plus concret, je voudrais qu'en mode portrait la largeur de mes textviews et editviews soient de 3cm et de 5cm en mode paysage. Mais en plus de ça je voudrais que la taille de la police s'adapte à la dimension du textview. Ceci pour ne pas avoir du texte qui déborde ou ridiculement trop petit.
    Pareillement, sur une tablette 12" avec une dalle 2K je voudrais que là aussi mes 2 colonnes occupent toute largeur. Je ne veux pas un truc tout rikiki au centre.
    Inversement, sur un vieux téléphone/tablette avec une définition faible, il faut que tout s'adapte sans déborder.

    Bon je sais pas si j'ai été très clair...

    Je vais regarder du côté de "TextAppearanceSmall" ou "Large" pour voir si ça convient.

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Tu peux aussi utiliser des "values" qui dépendront de l'orientation / taille de l'écran (au passage oublie tout de suite la notion de pixel... elle n'existe pas dans Android tant qu'on ne veut pas afficher des images aux petits oignons).

    Un écran a une taille en "dp" et c'est tout.

    Les S4, S5 et S6 ont tous une taille identique: 360x640dp

    La séparation en deux colonnes de même taille, c'est facile: layout_width=0dp et layout_weight=1 pour les deux (total_weight dans le layout de 2).
    Et ça marchera dans toutes les tailles et toutes les orientations.


    Par contre, la taille du texte, je pense qu'il faut passer par les "values".

    values_w360dp par exemple indiquera la taille de texte quand l'écran fait 360dp horizontalement.
    values_w480dp fera de même pour un écran de 480dp horizontalement
    etc...

    A toi de trouver la bonne taille de texte.

    Mais encore une fois, difficile d'indiquer dans ces conditions une taille en "sp" puisque celle-ci dépend du choix de l'utilisateur... Il peut très bien avoir des "sp" deux fois plus gros que les "dp", ou deux fois plus petits !

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut Précisions sur les résolutions en dp...
    Merci pour tes explications nicroman.

    Du coup j'ai 2 questions :
    - comment récupérer la largeur en dp de l'écran dans l'activité ? Je sais qu'on peut utiliser getDisplayMetrics mais ça ne donne que des valeurs en pixels.
    - où as-tu trouvé la resolution en dp du galaxy S4 ? Parce que quand je cherche sur internet ou avec CPU-Z, je n'ai que la résolution en pixels et la densité en dpi...

    Merci d'avance.

Discussions similaires

  1. [WD14] Ajustement automatique des colonnes
    Par thierrybatlle dans le forum WinDev
    Réponses: 2
    Dernier message: 28/07/2009, 10h08
  2. [WD14] Ajustement automatique des colonnes
    Par thierrybatlle dans le forum WinDev
    Réponses: 1
    Dernier message: 28/05/2009, 11h51
  3. [vb.net] Ajustement automatique des éléments d'une form
    Par solid_sneak06 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/03/2009, 18h21
  4. AJUSTEMENT AUTOMATIQUE LARGEUR ZONE DE TEXTE
    Par franckb3 dans le forum VBA Access
    Réponses: 0
    Dernier message: 08/06/2008, 19h31
  5. ajustement automatique des echelles d'un graphique
    Par riri2938 dans le forum VBA Access
    Réponses: 2
    Dernier message: 19/12/2007, 20h58

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