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 :

Propagation des styles


Sujet :

Android

  1. #1
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut Propagation des styles
    Bonjour,

    Je souhaite savoir pourquoi mes view personnalisées ne prennent pas automatiquement le style de mon application.

    Voici une capture d'écran pour illustrer le problème (les rectangles noirs sont là uniquement pour cacher des infos...) :

    Nom : UI.png
Affichages : 70
Taille : 195,6 Ko

    Dans l'encadré bleu, des éléments ajouté via le designer. Dans l'encadré rouge, des éléments ajouté par du code via une classe et un fichier layout xml personnalisé.

    Le code de la classe qui rend une ligne de l'encadré rouge :

    Code : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    public class AlarmView extends RelativeLayout
    {
    	private Alarm m_alarm;
     
    	private TextView m_alarmName_textview;
    	private TextView m_alarmLoc_textview;
    	private ToggleButton m_alarmOnOff_togglebutton;
    	private ImageView m_alarmLoc_imageview;
     
    	public AlarmView(Alarm alarm, Context context)
    	{
    		super(context);
    		init();
    		setAlarm(alarm);
    	}
     
    	public AlarmView(Alarm alarm, Context context, AttributeSet attrs) {
    		super(context, attrs);
    		init();
    		setAlarm(alarm);
    	}
     
    	public AlarmView(Alarm alarm, Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init();
            setAlarm(alarm);
        }
     
    	private void refreshAlarmInfos(Alarm alarm)
    	{
    		m_alarmName_textview.setText(alarm.getName());
     
    		if(alarm.getLocation().length() <= 0)
    		{
    			m_alarmLoc_imageview.setVisibility(INVISIBLE);
    			m_alarmLoc_textview.setVisibility(INVISIBLE);
    		}
    		else
    		{
    			m_alarmLoc_imageview.setVisibility(VISIBLE);
    			m_alarmLoc_textview.setVisibility(VISIBLE);
    			m_alarmLoc_textview.setText(alarm.getLocation());
    		}
     
    		m_alarmOnOff_togglebutton.setEnabled(alarm.isEnabled());
    	}
     
    	private void init()
    	{
    		inflate(getContext(), R.layout.alarm_view, this);
            m_alarmName_textview = (TextView)findViewById(R.id.alarm_name_textview_alarm_view);
            m_alarmLoc_textview = (TextView)findViewById(R.id.alarm_loc_textview_alarm_view);
            m_alarmOnOff_togglebutton = (ToggleButton)findViewById(R.id.alarm_onoff_togglebutton_alarm_view);
            m_alarmLoc_imageview = (ImageView)findViewById(R.id.alarm_loc_imageview_alarm_view);
    	}
     
    	public Alarm getAlarm() 
    	{
    		return m_alarm;
    	}
     
    	public void setAlarm(Alarm alarm) 
    	{
    		this.m_alarm = alarm;
     
    		refreshAlarmInfos(m_alarm);
    	}
    }
    Le contenu du fichier xml qui sert lors de l'inflate :

    Code : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pin_imageview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
     
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
     
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical" >
     
                <TextView
                    android:id="@+id/alarm_name_textview_alarm_view"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:ellipsize="end"
                    android:maxLines="1"
                    android:text="Alarm name"
                    android:textAppearance="?android:attr/textAppearanceLarge" />
     
                <LinearLayout
                    android:layout_width="256dp"
                    android:layout_height="wrap_content" >
     
                    <ImageView
                        android:id="@+id/alarm_loc_imageview_alarm_view"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:adjustViewBounds="true"
                        android:contentDescription="@string/pin_contentdescription"
                        android:maxWidth="32dp"
                        android:src="@drawable/pin" />
     
                    <TextView
                        android:id="@+id/alarm_loc_textview_alarm_view"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:ellipsize="end"
                        android:lines="2"
                        android:maxLines="1"
                        android:text="LocationLocationLocationLocationLocationLocation"
                        android:textAppearance="?android:attr/textAppearanceSmall" />
                </LinearLayout>
            </LinearLayout>
     
            <ToggleButton
                android:id="@+id/alarm_onoff_togglebutton_alarm_view"
                android:layout_width="60dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:textOff="@string/alarm_off"
                android:textOn="@string/alarm_on" />
     
        </LinearLayout>
     
        <View
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:layout_marginTop="5dp"
            android:background="@android:color/darker_gray" />
     
    </LinearLayout>

    Sans doute un détail bête mais étant débutant, j'ai du mal à trouver mon information.

    Merci !
    Un clavier Azerty en vaut deux.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonsoir,

    Perso, je n'ai jamais appliqué de style à un objet graphique android depuis le code java, mais comme je ne suis pas très sûr de ta question je vais te répondre comme si tu voulais appliquer le style via le xml.

    Donc, dans tes objets, il faut faire apparaître une ligne qui va aller chercher la définition du style que tu auras préalablement détaillé dans le fichier res/values/styles.xml.
    cette ligne ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    style="@style/nom_du_style"
    Ce qui donnerai par exemple pour un de tes TextView :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <TextView
                    style="@style/nom_du_style"
                    android:id="@+id/alarm_name_textview_alarm_view"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:ellipsize="end"
                    android:maxLines="1"
                    android:text="Alarm name"
                    android:textAppearance="?android:attr/textAppearanceLarge" />
    et dans un fichier res/values/styles.xml, il te faudra donc définir ton style.

    J'espère avoir bien répondu à ta question mais j'avoue que je n'ai pas trop cerné si ton problème vient du code java ou des xml.

    Cordialement,
    OS : LinuxMint 20

  3. #3
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    L'idée c'est pas vraiment d'appliquer un style particulier, juste utiliser celui en cours dans l'application. Sans rien indiquer de particulier, les éléments du designer Eclipse ont un certain rendu qui est différent des éléments créés et ajoutés via du code (voir la couleur du texte et des boutons).

    La question est comment faire pour que ces éléments ajoutés par du code utilise le même style (ou thème ?) que celui utilisé par le designer.
    Un clavier Azerty en vaut deux.

Discussions similaires

  1. [Windows] Propagation des styles
    Par Invité dans le forum Composants FMX
    Réponses: 13
    Dernier message: 26/09/2014, 18h36
  2. Récupérer le nom des styles de police
    Par boublee dans le forum Windows
    Réponses: 1
    Dernier message: 10/08/2005, 17h02
  3. [CSS2] Souci d'héritage et de priorité des styles.
    Par ARRG dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 12/07/2005, 09h03
  4. Des styles pour le texte et les liens dans la meme div?
    Par Donkey' Shot dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 26/01/2005, 20h03
  5. Etude des "styles" de programmation
    Par RiRi51 dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/03/2003, 19h50

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