Android layout_width & layout_height, как это работает? - PullRequest
5 голосов
/ 02 января 2012

Я пытаюсь создать интерфейс, в котором пользователю будут отображаться две или более кнопок, при нажатии на кнопку ему будут отображаться некоторые макеты.Я использую SlidingDrawer для этой цели.

Что ж, меня смущают layout_width & layout_height properties .

Если я устанавливаю свойства какниже на экране отображается только «Ручка 1».

android:layout_width="fill_parent" android:layout_height="wrap_content"

Честно говоря, у меня недостаточно знаний об обоих этих свойствах. Может кто-нибудь поделиться своими знаниями о них?

main.xml:

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

    <SlidingDrawer android:id="@+id/slidingDrawer1"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:handle="@+id/handle1"
            android:content="@+id/content1">
                <Button android:text="Handle 1" android:layout_height="wrap_content"
                        android:layout_width="fill_parent" android:id="@+id/handle1"></Button>
                <LinearLayout android:id="@+id/content1"
                        android:layout_width="fill_parent" android:layout_height="wrap_content"
                        android:orientation="vertical" android:gravity="center"
                        android:background="#FF444444">
                        <Button android:text="Handle 1 Item 1" android:layout_height="wrap_content"
                                android:layout_width="wrap_content" android:id="@+id/item1"></Button>
                </LinearLayout>
    </SlidingDrawer>

    <SlidingDrawer android:id="@+id/slidingDrawer2"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:handle="@+id/handle2"
            android:content="@+id/content2">
                <Button android:text="Handle 2" android:layout_height="wrap_content"
                        android:layout_width="fill_parent" android:id="@+id/handle2"></Button>
                <LinearLayout android:id="@+id/content2"
                        android:layout_width="fill_parent" android:layout_height="wrap_content"
                        android:orientation="vertical" android:gravity="center"
                        android:background="#FF444444">
                        <Button android:text="Handle 2 Item 1" android:layout_height="wrap_content"
                                android:layout_width="wrap_content" android:id="@+id/item2"></Button>
                </LinearLayout>
    </SlidingDrawer>     
</LinearLayout>

Ответы [ 3 ]

6 голосов
/ 02 января 2012

Свойства layout_width и layout_height представления предназначены для использования его родительским контейнером. Некоторые контейнеры игнорируют один или оба из них; большая их честь. Вам нужно обратиться к документации контейнера (в вашем случае SlidingDrawer), чтобы понять, как будут использоваться значения.

Вы не показываете полный файл main.xml, поэтому трудно точно сказать, что происходит не так. Также будет полезно, если вы разместите изображение того, что не так.

EDIT

После просмотра вашего полного макета я думаю, что основная проблема здесь заключается в том, что вы используете LinearLayout для хранения SlidingDrawers. Как отмечают документы для SlidingDrawer , они должны быть либо в FrameLayout, либо в RelativeLayout (фактически, в любом контейнере, в котором несколько представлений располагаются друг над другом).

Другая возможность заключается в том, что второй SlidingDrawer находится прямо под первым. Попробуйте изменить размер второй кнопки (например, сделать текст длиннее) и посмотрите, не высовывается ли она с обеих сторон кнопки 1.

4 голосов
/ 02 января 2012

fill_parent = match_parent, и это означает, что он принимает ширину или высоту (для какого свойства он указывается) «родительского» контейнера

wrap_content означает, что высота или ширина принимает высотуили ширина дочернего элемента

Вы хотите использовать веса вместо использования match_parent или wrap_content, как правило.

Когда вы используете веса, вы хотите установить ширину 0dp.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

    <LinearLayout
    android:id="@+id/lowerLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="1.0" >
            <LinearLayout
            android:id="@+id/headerLayout"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_weight=".7" >
                <Button
                    android:id="@+id/previousMonthButton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Previous" />

                <TextView
                    android:id="@+id/monthName"
                    android:layout_width="0dip"
                    android:layout_height="wrap_content"
                    android:text="Large Text"
                    android:layout_weight="1"
                    android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_horizontal" />

                <Button
                    android:id="@+id/nextMonthButton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Next" />

            </LinearLayout>

            <LinearLayout
            android:id="@+id/lowerLayout3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_weight=".3" >

                <Button
                    android:id="@+id/addEvent"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />

            </LinearLayout>

    </LinearLayout>
    <LinearLayout
    android:id="@+id/lowerLayout2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="1.0" >

        <LinearLayout
            android:id="@+id/monthView"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight=".7" >

        </LinearLayout>

        <ListView
            android:id="@+id/listView1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight=".3" >
        </ListView>
    </LinearLayout>

</LinearLayout>
0 голосов
/ 02 января 2012

Я думаю, что вы пытаетесь добавить 2 Sliding Drawer.

Размер SlidingDrawer определяет, сколько места будет занимать содержимое после того, как оно выскользнуло, поэтому SlidingDrawer обычно должен использовать match_parent для обоих своих измерений, в этом случае одно перекрытие другогоодин, чтобы вы не могли видеть обработчик 2.

Если вы установили видимость «ушел» в первом SlidingDrawer, вы увидите другой.

Обновление

Привет,

Пожалуйста, попробуйте этот код, может он вам поможет

<?xml version="1.0" encoding="utf-8"?>

<SlidingDrawer
    android:id="@+id/slidingDrawer1"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:content="@+id/content1"
    android:handle="@+id/handle1" >

    <Button
        android:id="@+id/handle1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Handle 1" >
    </Button>

    <LinearLayout
        android:id="@+id/content1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#FF444444"
        android:gravity="center"
        android:orientation="vertical" >

        <Button
            android:id="@+id/item1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Handle 1 Item 1" >
        </Button>
    </LinearLayout>
</SlidingDrawer>
...