2

我不知道你们是否经常使用这种类型的布局,但这让我抓狂。

例如,当我在屏幕中间放置一个按钮,然后在按钮附近放置一个 textview 时,IDE 突然对它们重新排序,textview 位于顶部,按钮位于右侧。

在屏幕上使用太多元素时可能会出现问题。
从那时起我使用线性布局,但它也有一些限制。

谢谢,我是android开发的新手(4天开始学习)所以我希望你们能帮助我。

4

3 回答 3

3

我很少使用 RelativeLayout 作为活动的主要布局。建议使用 LinearLayout 并设置android:weightSum,以便您的应用程序可以对屏幕有更大的支持。如您所知,运行 Android 的设备种类繁多,具有不同的屏幕尺寸。仅当您希望该视图位于具有该固定大小的特定位置时,才使用 RelativeLayout。

请参阅使用 LinearLayouts 创建具有许多元素的活动的示例,如您所指:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"  
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:padding="@dimen/padding_small"
android:weightSum="3"
tools:ignore="HardcodedText" >

<LinearLayout
    android:id="@+id/picker_time_hour"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/picker_time_hour_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/hours"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <Button
        android:id="@+id/picker_time_hour_up"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:text="+" />

    <EditText
        android:id="@+id/picker_time_hour_value"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:inputType="number" />

    <Button
        android:id="@+id/picker_time_hour_down"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:text="-" />
</LinearLayout>

<LinearLayout
    android:id="@+id/picker_time_minute"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/picker_time_minute_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/minutes"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <Button
        android:id="@+id/picker_time_minute_up"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:text="+" />

    <EditText
        android:id="@+id/picker_time_minute_value"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:inputType="number" />

    <Button
        android:id="@+id/picker_time_minute_down"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:text="-" />
</LinearLayout>

<LinearLayout
    android:id="@+id/picker_time_second"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/picker_time_second_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/seconds"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <Button
        android:id="@+id/picker_time_second_up"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:text="+" />

    <EditText
        android:id="@+id/picker_time_second_value"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:inputType="number" />

    <Button
        android:id="@+id/picker_time_second_down"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:text="-" />
</LinearLayout>

</LinearLayout>

结果是:

在此处输入图像描述

正如你所看到的,我的意见是你应该使用 LinearLayouts,但是阅读这个主题,它也可以帮助你选择。

于 2012-11-04T23:14:30.067 回答
1

根据我的经验,您不应该使用 Eclipse 拖放 ui 构建器。它只会引起混乱和问题。它还不够成熟(即使它在过去几年取得了很大进展)。

特别是作为初学者,您应该直接使用 xml。这将使您更好地理解布局机制。我不知道有哪个 android 开发人员认真地与 ide builder 合作。

于 2012-11-04T23:11:18.723 回答
1

相对布局已经证明是我最常用的布局。除了真正可定制的事实(尽管可能不如 LinearLayout 简单)之外,它也非常“快”。“快速”意味着当您使用嵌套的 LinearLayout 时会有一定的开销,您可以通过使用 RelativeLayout 来避免这种开销。具体来说:

不幸的是,坚持基本功能并不是创建用户界面的最有效方式。一个常见的例子是滥用 LinearLayout,这导致视图层次结构中的视图激增。添加到应用程序中的每个视图——或者更糟糕的是,每个布局管理器——都是有代价的:初始化、布局和绘图变得更慢。当您嵌套多个使用权重参数的 LinearLayout 时,布局传递可能会特别昂贵,这需要对子元素进行两次测量。

于 2012-11-04T23:04:46.023 回答