53 votes

Android:layout_height 50% de la taille de l'écran

Je viens d'implémenter un ListView à l'intérieur d'un LinearLayout, mais je dois définir la hauteur du LinearLayout (elle doit être égale à 50% de la hauteur de l'écran).

<LinearLayout
    android:id="@+id/widget34"
    android:layout_width="300px"
    android:layout_height="235px"
    android:orientation="vertical"
    android:layout_below="@+id/tv_scanning_for"
    android:layout_centerHorizontal="true">

    <ListView
        android:id="@+id/lv_events"
        android:textSize="18sp"         
        android:cacheColorHint="#00000000"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_scanning_for"
        android:layout_centerHorizontal="true">
    </ListView>

</LinearLayout>

Est-ce possible ?

J'ai fait quelque chose de similaire pour un bouton et un EditText, mais cela ne semble pas fonctionner avec les Layouts.

Voici mon code :

    //capture the size of the devices screen
    Display display = getWindowManager().getDefaultDisplay();
    double width = display.getWidth();

    //my EditText will be smaller than full screen (80%)        
    double doubleSize = (width/5)*4;
    int editTextSize = (int) doubleSize;

    //define the EditText 
    userName = (EditText) this.findViewById(R.id.userName);
    password = (EditText) this.findViewById(R.id.password);

    //set the size
    userName.setWidth(editTextSize);
    password.setWidth(editTextSize);

0 votes

Avez-vous essayé d'utiliser un RelativeLayout autour du LinearLayout et de dimensionner le RelativeLayout ?

0 votes

Puis-je entrer un pourcentage dans le paramètre RelativeLayout height ?

0 votes

Utiliser des LayoutParams personnalisés : developer.Android.com/reference/Android/view/ avec RelativeLayout.setLayoutParams() : developer.Android.com/reference/Android/view/ . fixer la hauteur à display.getHeight()/2

101voto

LeffelMania Points 5484

Définir son layout_height="0dp" *, ajouter un blanc View en dessous (ou en blanc) ImageView ou simplement un FrameLayout ) avec un layout_height également égal à 0dp et définir les deux points de vue de manière à ce qu'ils aient un layout_weight="1"

Cela permet d'étirer chaque vue de manière égale au fur et à mesure qu'elle remplit l'écran. Comme elles ont toutes deux le même poids, elles occuperont chacune 50 % de l'écran.

*Voir le commentaire d'adamp pour savoir pourquoi cela fonctionne et d'autres informations très utiles.

24 votes

Lorsque vous utilisez un poids, n'oubliez pas qu'il répartit reste après que toutes les vues d'enfants ont été mesurées. Si vous souhaitez vous baser uniquement sur le poids, vous devez définir l'option layout_height="0dp" au lieu de wrap_content . Vous pouvez également définir weightSum sur un LinearLayout de manière explicite plutôt que d'ajouter des vues vierges juste pour gonfler le poids total.

0 votes

@adamp C'est vraiment une excellente information que je ne connaissais pas. Merci beaucoup.

0 votes

Qu'en est-il de l'équilibre des proportions en termes de largeur ?

8voto

Emiam Points 1911

C'est facile à faire en xml. Définissez votre conteneur supérieur comme étant un LinearLayout et définissez l'attribut d'orientation comme vous le souhaitez. Ensuite, à l'intérieur de ce conteneur, placez deux linearlayouts qui ont tous les deux "fill parent" sur la largeur et la hauteur. Enfin, définissez l'attribut weigth de ces deux linearlayouts à 1.

6voto

Praise Song Points 59

Voici mon Android:layout_height=50% activité :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/alipay_login"
        style="@style/loginType"
        android:background="#27b" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/taobao_login"
        style="@style/loginType"
        android:background="#ed6d00" >
    </LinearLayout>

</LinearLayout>

le style :

<style name="loginType">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:layout_weight">0.5</item>
    <item name="android:orientation">vertical</item>
</style>

3voto

La meilleure façon est d'utiliser

layout_height= "0dp" layout_weight="0.5"

par exemple

<WebView
    android:id="@+id/wvHelp"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.5" />

<TextView
    android:id="@+id/txtTEMP"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.5"
    android:text="TextView" />

WebView, TextView ont 50% de la hauteur de l'écran

2voto

swayamraina Points 431

Pour s'assurer que la hauteur d'une vue correspond à 50 % de l'écran, nous pouvons créer deux sous-linéaires dans un LinearLayout. Chacun des LinearLayout enfants doit avoir " Android:layout_weight " de 0.5 pour couvrir la moitié de l'écran

le LinearLAyout parent devrait avoir " Android:orientation " est réglé sur vertical

.

.

Voici le code pour votre référence.... ce code contient deux boutons d'une hauteur égale à la moitié de l'écran

<LinearLayout 
android:orientation="vertical"
android:layout_height="match_parent">

<LinearLayout

    android:layout_weight="0.5"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <Button
        android:padding="10dp"
        android:layout_weight="0.5"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:text="button1"
        android:id="@+id/button1"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        />

    <Button
        android:padding="10dp"
        android:layout_weight="0.5"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:text="button2"
        android:id="@+id/button2"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        />

    </LinearLayout>

<LinearLayout

    android:layout_weight="0.5"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    </LinearLayout>
   </LinearLayout>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X