2017-10-16 2 views
0

dans ma mise en page XML J'essaie de définir un autre paddingTop sur un LinearLayout en fonction de l'orientation de l'affichage.Modifier l'attribut de remplissage XML en fonction de l'orientation de l'affichage

Le code ci-dessus est pour le mode portrait, mais en mode paysage je voudrais, par exemple, android:paddingTop="20dp"

<LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:paddingStart="5dp" 
     android:paddingEnd="0dp" 
     android:paddingTop="60dp" 
     android:orientation="vertical"> 

     <TextView></TextView> 
     <TextView></TextView> 

    </LinearLayout> 

Il est possible de XML ou ai-je besoin de le gérer par programme sur le changement d'orientation de l'écran?

Merci.

Répondre

1

Vous disposez de deux options lorsque vous utilisez xml. Spécifiez différents fichiers de mise en page pour le mode portrait/paysage ou utilisez un fichier de mise en page unique et définissez des dimensions différentes pour le mode portrait/paysage.

différents fichiers mise en page

En utilisant différentes mise en page est vraiment nécessaire que si vous avez une disposition sensiblement différente en mode portrait/paysage. Il est plus difficile de conserver différentes mises en page au fur et à mesure de la croissance de votre application. Dans votre dossier res vous devez créer deux sous-dossiers:

res/layout-port 

res/layout-land 

Vous pouvez ensuite créer un fichier avec le même nom dans chacun de ces dossiers. Lorsque l'appareil est en mode portrait, le fichier layout-port est utilisé et en mode paysage, le fichier layout-land est utilisé.

différents fichiers Dimens

La deuxième option consiste à utiliser un fichier de mise en page, mais de définir une dimension dynamique en elle. vous tout d'abord à nouveau besoin de créer deux dossiers dans votre dossier res:

res/values-port 
res/values-land 

Vous devez ensuite créer un fichier appelé dimens.xml dans chacun de ces dossiers. Dans le dossier values-port vous définiriez comme:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="main_screen_padding_top">60dp</dimen> 
</resources> 

et dans le dossier values-land vous définiriez comme:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="main_screen_padding_top">20dp</dimen> 
</resources> 

Ensuite, dans votre mise en page fichier XML que vous pouvez faire référence à cette valeur dimen:

<LinearLayout 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:paddingStart="5dp" 
    android:paddingEnd="0dp" 
    android:paddingTop="@dimen/main_screen_padding_top" 
    android:orientation="vertical"> 

    <TextView></TextView> 
    <TextView></TextView> 

</LinearLayout> 

Et il utilisera la dimension appropriée en fonction de l'orientation de l'appareil.

Pour votre usage, je suggère d'utiliser la méthode des dimensions, car il est généralement plus facile à entretenir.

+0

C'est exactement ce que je cherchais. Je vous remercie – fattidare