web-dev-qa-db-fra.com

Définir la largeur de relativelout 1/3 de la largeur de l'écran?

J'ai une mise en page comme ci-dessous. Maintenant, je ne veux pas définir la largeur de la mise en page relative à 240 dp fixe. Je veux définir la largeur de la mise en page relative à 1/3 de la largeur de l'écran. Est-il possible de faire cela dans le fichier XML? Si c'est impossible, comment puis-je y parvenir en utilisant du code Java?

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:id="@+id/fullscreen"
        style="@style/translucent">
           <RelativeLayout
            Android:layout_width="240dp"
            Android:layout_height="fill_parent"
            Android:layout_gravity="right"
            Android:gravity="center"
            Android:background="#88000000"
            Android:id="@+id/sidebar">

           </RelativeLayout>

    </FrameLayout>
14
Kelvin Tan

utilisez weightsum="3" dans le parent et layout_weight=1 dans l'enfant. Jetez un oeil à cette référence

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:id="@+id/fullscreen"
    style="@style/translucent"
    Android:orientation="horizontal"
    Android:weightSum="3">

    <RelativeLayout
        Android:layout_width="0dp"
        Android:layout_height="fill_parent"
        Android:layout_gravity="right"
        Android:gravity="center"
        Android:background="#88000000"
        Android:id="@+id/sidebar"
        Android:layout_weight="1" 
        >

    </RelativeLayout>

    <!-- other views, with a total layout_weight of 2 -->

</LinearLayout>
24
Carlos Robles

Vous devez utiliser une LinearLayout pour que la largeur d'une vue soit égale à un tiers de sa vue parent.

Quelque chose comme:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <RelativeLayout
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:gravity="center"
        Android:background="#88000000">
    </RelativeLayout>
    <ViewGroup
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="2">
    </ViewGroup>
</LinearLayout>

Le bit clé est le rapport entre layout_weights. La documentation est plutôt bonne.

2
Estel

Une LinearLayout avec un Android:layout_orientation="horizontal" est ce que vous voulez, avec des poids.

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="horizontal">

    <RelativeLayout
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        ...all your stuff... />

    <View
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="2" />


</LinearLayout>
1
Chris Horner