2012-11-04 33 views
2

我不知道你们是否在大多数时间使用这种类型的布局,但它使我发疯。

例如,当我在屏幕中间放置一个按钮,然后在按钮旁边放置一个textview时,IDE会重新对它们进行重新排序,并且textview会放在最上面,按钮放在右边。

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

谢谢,我是刚刚进​​入android开发(4天开始学习),所以我希望你们可以帮助我。Eclipse相对布局很难工作

回答

1

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

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

+0

你是对的,我希望它更多的是一个视觉工作室UI编辑器类型,它是快速,简单和可靠的。 –

1

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

特别是作为初学者,你应该直接使用xml。这会让你更好地理解布局机制。我不知道一个单独的android开发人员,他正在与ide构建者认真合作。

3

我很少使用RelativeLayout作为活动的主布局。建议使用LinearLayout并设置android:weightSum,以便您的应用程序可以对屏幕提供更大的支持。正如您所知,运行Android的各种设备具有不同的屏幕尺寸。只有当你想在那个具有固定大小的特定位置放置该视图时才使用RelativeLayout。

请参阅使用LinearLayouts创建有很多元素活动的这个例子中,你refered:

<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,它也可以帮助您选择。

+0

谢谢,我碰巧听说有拖放用户界面构建器的外部程序,并将结果导出为XML。你知道吗? –

+0

我听说过[Codiqa](http://www.codiqa.com/),但它不是免费的。我通过代码创建布局。我知道在堕落的人们倾向于使用拖放式UI构建器,但是当您有更多的经验时,您将更容易使用代码工作。但是取决于你。 –