Android: layout_height 50% от размера экрана - PullRequest
43 голосов
/ 22 июля 2011

Привет всем, я только что реализовал ListView внутри LinearLayout, но мне нужно определить высоту LinearLayout (она должна составлять 50% от высоты экрана).

<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>

Это возможно?

Я сделал нечто подобное для кнопки и EditText, но, похоже, не работает с макетами.

Это мой код:

    //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);

Спасибо!:)

Ответы [ 10 ]

76 голосов
/ 22 июля 2011

Установите его layout_height="0dp"*, добавьте пробел View под ним (или пробел ImageView или просто FrameLayout) с layout_height, также равным 0dp, и установите оба вида, чтобы иметьlayout_weight="1"

Это растянет каждый вид в равной степени по мере заполнения экрана.Поскольку оба имеют одинаковый вес, каждый из них занимает 50% экрана.

* См. Комментарий Адама о том, почему это работает, и другие действительно полезные лакомые кусочки.

6 голосов
/ 07 февраля 2013

Это мой андроид: layout_height = 50% активность:

<?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>

стиль:

<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>
6 голосов
/ 22 июля 2011

Это легко сделать в xml. Установите верхний контейнер на LinearLayout и установите атрибут ориентации по своему усмотрению. Затем внутри этого места два линейных макета, которые оба имеют «заливку родителя» по ширине и высоте. Наконец, установите атрибут weigth этих двух линейных разметок равным 1.

3 голосов
/ 13 января 2015

лучший способ - это использование

layout_height = "0dp" layout_weight = "0.5"

например

<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 имеют 50% высоты экрана

0 голосов
/ 08 мая 2019

Вы можете использовать android:weightSum="2" на родительском макете в сочетании с android:layout_height="1" на дочернем макете.

           <LinearLayout
                android:layout_height="match_parent"
                android:layout_width="wrap_content"
                android:weightSum="2"
                >

                <ImageView
                    android:layout_height="1"
                    android:layout_width="wrap_content" />

            </LinearLayout>
0 голосов
/ 04 мая 2017

Чтобы достичь этого навыка, определите внешнюю линейную схему с помощью weightSum={amount of weight to distribute}.

определяет максимальную сумму веса. Если не указано, сумма вычисляется путем добавления layout_weight для всех дочерних элементов. Это может быть использовано, например, для того, чтобы дать одному ребенку 50% от общего доступного пространства, задав ему layout_weight 0,5 и установив weightSum равным 1.0. В другом примере будет установлен weightSum = 2, а если два потомка установят layout_weight=1 тогда каждый получит 50% доступного пространства.

Весовая сумма зависит от количества дочерних элементов в родительском макете.

0 голосов
/ 31 июля 2016

Этот вид работал для меняХотя FAB не плавает независимо, но теперь он не отталкивается.

Соблюдайте веса, указанные внутри LinearLayout

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:id="@+id/andsanddkasd">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/sharedResourcesRecyclerView"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="4"
                />

            <android.support.design.widget.FloatingActionButton
                android:id="@+id/fab"
                android:layout_width="wrap_content"
                android:layout_height="0dp"
                android:layout_gravity="bottom|right"
                android:src="@android:drawable/ic_input_add"
                android:layout_weight="1"/>

        </LinearLayout>

Надеюсь, это поможет:)

0 голосов
/ 23 июля 2016

Чтобы убедиться, что высота вида составляет 50% экрана, мы можем создать два вложенных LinearLayouts в LinearLayout. Каждый из дочерних LinearLayout должен иметь " android: layout_weight " из 0.5 , чтобы покрыть половину экрана

родительский LinearLAyout должен иметь " android: ориентация ", установленный на вертикальный

.

.

вот код для вашей справки .... этот код содержит две кнопки высотой половины экрана

<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>
0 голосов
/ 12 января 2015

это так просто, если вы хотите разделить экран на две части по вертикали (top30% + bottom70%)

<LinearLayout
            android:id="@+id/LinearLayoutTop"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="2">

     </LinearLayout>
     <LinearLayout
            android:id="@+id/LinearLayoutBottom"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1">

     </LinearLayout>
0 голосов
/ 22 июля 2011

Вы должны сделать что-то подобное:

<LinearLayout
    android:id="@+id/widget34"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    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_height="1"
        android:layout_width="fill_parent"
        android:layout_weight="0dp"
        android:layout_below="@+id/tv_scanning_for"
        android:layout_centerHorizontal="true"
        />

</LinearLayout>

Также используйте dp вместо px или прочитайтеоб этом здесь .

...