我不知道你们大多数时候都会使用这种类型的布局,但这会让我发疯。
例如,当我在屏幕中间放置一个按钮,然后在按钮附近放置一个textview时,IDE会重新排序它们,textview会显示在顶部,而按钮则在右边。
在屏幕上使用太多元素时会出现问题。
从那时起我使用线性布局,但它也有一些局限性。
谢谢,我是Android开发新手(4天开始学习),所以我希望你们能帮助我。
答案 0 :(得分: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,但是read this topic,它也可以帮助你选择。
答案 1 :(得分:1)
相对布局已经证明是我最常用的布局。除了可以自定义的事实(虽然可能不如LinearLayout简单),它也非常“快”。 “快速”意味着当您使用嵌套的LinearLayouts时会有一定的开销,您可以通过使用RelativeLayout来避免。具体做法是:
遗憾的是,坚持基本功能并不是最有效的 创建用户界面的方法。一个常见的例子是滥用 LinearLayout,它导致视图中的视图泛滥 层次结构。您添加的每个视图 - 或者更糟的是每个布局管理器 您的应用程序需要付出代价:初始化,布局和 绘图变慢。布局通过可能特别昂贵 当你嵌套几个使用weight参数的LinearLayout时, 这需要对孩子进行两次测量。
答案 2 :(得分:1)
根据我的经验,你不应该使用eclipse drag&amp; drop ui builder。它只会造成混乱和问题。它还不够成熟(即使它在过去几年取得了很大的进步)。
特别是作为初学者,您应该直接使用xml。这将使您更好地了解布局机制。我不认识一个Android开发人员,他正在认真地与ide构建器合作。