Eclipse相对布局很难工作

时间:2012-11-04 22:54:29

标签: android eclipse layout

我不知道你们大多数时候都会使用这种类型的布局,但这会让我发疯。

例如,当我在屏幕中间放置一个按钮,然后在按钮附近放置一个textview时,IDE会重新排序它们,textview会显示在顶部,而按钮则在右边。

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

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

3 个答案:

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

结果是:

enter image description here

你可以看到我的观点是你应该使用LinearLayouts,但是read this topic,它也可以帮助你选择。

答案 1 :(得分:1)

相对布局已经证明是我最常用的布局。除了可以自定义的事实(虽然可能不如LinearLayout简单),它也非常“快”。 “快速”意味着当您使用嵌套的LinearLayouts时会有一定的开销,您可以通过使用RelativeLayout来避免。具体做法是:

  

遗憾的是,坚持基本功能并不是最有效的   创建用户界面的方法。一个常见的例子是滥用   LinearLayout,它导致视图中的视图泛滥   层次结构。您添加的每个视图 - 或者更糟的是每个布局管理器   您的应用程序需要付出代价:初始化,布局和   绘图变慢。布局通过可能特别昂贵   当你嵌套几个使用weight参数的LinearLayout时,   这需要对孩子进行两次测量。

答案 2 :(得分:1)

根据我的经验,你不应该使用eclipse drag&amp; drop ui builder。它只会造成混乱和问题。它还不够成熟(即使它在过去几年取得了很大的进步)。

特别是作为初学者,您应该直接使用xml。这将使您更好地了解布局机制。我不认识一个Android开发人员,他正在认真地与ide构建器合作。