web-dev-qa-db-fra.com

Android: 2 dispositions relatives divisées en deux écrans

J'ai essayé à plusieurs reprises de dessiner 2 dispositions relatives alignées horizontalement et divisées en deux.

enter image description here

Je conçois l'image avec Paint pour expliquer un peu mieux ce que je veux dire.

Toute suggestion?

39
iGio90

Vous pouvez mettre ces 2 RelativeLayouts dans un LinearLayout à orientation horizontale, puis utilisez le weight pour les deux RelativeLayouts. Cela divisera LinearLayout en 2 parties égales.

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="horizontal"
    Android:baselineAligned="false">
    <RelativeLayout
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight="1">
   </RelativeLayout>
   <RelativeLayout
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight="1">
   </RelativeLayout>
</LinearLayout>
48
2Dee

Une autre façon de réaliser la même tâche sans avoir à utiliser LinearLayout consiste à placer un "calque" aligné au centre au milieu de la présentation parente, puis à y aligner d'autres éléments. Si vous définissez la largeur de l'élément de demi-largeur sur match_parent, mais que vous alignez leurs côtés gauche et droit, ils finiront par se réduire pour s'adapter.

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.EqualWidthExample" >

    <!-- An invisible view aligned to the center of the parent. Allows other
    views to be arranged on either side -->
    <View 
        Android:id="@+id/centerShim"
        Android:layout_height="match_parent"
        Android:layout_width="0dp"
        Android:visibility="invisible"
        Android:layout_centerHorizontal="true"/>

    <!--Set width to match_parent sets maximum width. alignParentLeft aligns 
    the left Edge of this view with the left Edge of its parent. toLeftOf 
    sets the right Edge of this view to align with the left Edge of the 
    given view. The result of all three settings is that this view will 
    always take up exactly half of the width of its parent, however wide 
    that may be. -->
    <Button
        Android:id="@+id/btLeft"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentLeft="true"
        Android:layout_toLeftOf="@+id/centerShim"
        Android:text="Left Button" />

    <!--Same deal, but on the right -->
    <Button
        Android:id="@+id/btRight"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentRight="true"
        Android:layout_toRightOf="@+id/centerShim"
        Android:layout_below="@+id/tvLeft"
        Android:text="Right Button" />
</RelativeLayout>
109
KevBry

maintenant vous pouvez le faire facilement en utilisant PercentRelativeLayout

<Android.support.percent.PercentRelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:padding="16dp"
tools:context=".MainActivity">


<Button
    Android:id="@+id/button"
    Android:layout_height="wrap_content"
    Android:layout_centerVertical="true"
    Android:text="Button"
    app:layout_widthPercent="50%"/>

<Button
    Android:id="@+id/button2"
    Android:layout_height="wrap_content"
    Android:layout_centerVertical="true"
    Android:layout_toRightOf="@id/button"
    Android:text="Button 2"
    app:layout_widthPercent="50%"/>
</Android.support.percent.PercentRelativeLayout>

n'oubliez pas d'ajouter la dépendance de gradle

dependencies {
     compile 'com.Android.support:percent:25.3.1'
}

code dans github

Mettre à jour

PercentRelativeLayout est obsolète depuis le niveau d'API 26.0.0

4
zaPlayer

Je vois 4 retraits relatifs dans ton dessin ...?

Si vous voulez dire que les deux au milieu les mettent dans un LinearLayout (orientation horizontale), laissez-les tous avoir une largeur de match_parent et donnez un poids de 1

0
jpm