`
Beyon_javaeye
  • 浏览: 66871 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

布局技巧:创建高效布局

阅读更多
布局技巧:创建高效布局

  Android UI工具包提供了一些布局管理器,它们使用起来相当容易,而且,大多数的时候,你只需要使用它们最基本的特征来实现UI。
  执着于基本特征的使用对于创建UI来说,往往不是最高效的。一个常见的例子就是滥用LinearLayout,它将会导致View树中的View数量激增。View——更糟的是,布局管理器——添加到应用程序里都会带来一定的消耗:初始化,布局和绘制变得更加缓慢。嵌套布局的花销尤其“昂贵”,例如,如果你嵌套了一些LinearLayout,并使用了weight参数,这会导致子元素要计算两次。
  让我们看一个非常简单且常见的布局例子:一个列表项,左边是一个图标,右边是标题和描述,上方是标题,下方是可选的描述。列表项可能看起来如下图:

  为了清楚地认识View之间(一个ImageView和两个TextView)的相对位置,下图是使用HierarchyViewer抓获的布局剪影:

  实现这个布局,直接使用LinearLayout就可以了。列表项本身是一个水平的LinearLayout,里面有一个ImageView和一个垂直的LinearLayout,垂直的LinearLayout里包含两个TextView。以下是这个布局的源代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:padding="6dip">
    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_marginRight="6dip"
        android:src="@drawable/icon" />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="fill_parent">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:text="My Application" />
        <TextView  
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1" 
            android:singleLine="true"
            android:ellipsize="marquee"
            android:text="Simple application that shows how to use RelativeLayout" />
        </LinearLayout>
</LinearLayout>

  如果你将它作为ListView的item,它能正常工作,但却是相当浪费的。相同的布局可以使用RelativeLayout进行重写,相对于每个列表项来说,可以节省一个View,且View层级上更好,只有一层。使用RelativeLayout也很简单:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:padding="6dip">
    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:layout_marginRight="6dip"
        android:src="@drawable/icon" />
<TextView  
        android:id="@+id/secondLine"
        android:layout_width="fill_parent"
        android:layout_height="26dip" 
        android:layout_toRightOf="@id/icon"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:text="Simple application that shows how to use RelativeLayout" />
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/icon"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_above="@id/secondLine"
        android:layout_alignWithParentIfMissing="true"
        android:gravity="center_vertical"
        android:text="My Application" />
</RelativeLayout>

    新的实现与老的实现看起来效果完全一致,除了一种情况。每个列表项显示两行文字:标题和可选的描述。当某一个列表项的描述不可获得时,应用程序可能希望将第二个TextView的Visibility设为GONE。LinearLayout实现版表现得很完美,但RelativeLayout实现版就有点差强人意了:

    在RelativeLayout里,每个View都是和父元素RelativeLayout对齐或是和其它View对齐的。例如,我们声明描述部分是和RelativeLayout的底部对齐,标题位于其上并与RelativeLayout的顶端对齐。当描述GONE时,RelativeLayout不知道怎么去放置标题的底边缘。为了解决这个问题,你可以使用一个非常简单的布局参数:layout_alignWithParentIfMissing。
    这个布尔参数告诉RelativeLayout:如果目标对象消失时使用自己的边缘作为锚点。例如,如果你放置一个View到另一个Visibiity属性设为GONE的View的右边,且设定alignWithParentIfMissing为true,RelativeLayout就会将其左边缘作为View的对齐锚点。在我们的这个场合,使用alignWithParentIfMissing的结果是RelativeLayout将标题部分的底部与自己的底部对齐。结果如下所示:


  现在,我们的布局表现得很完美了,即使描述部分的Visibility属性设为GONE。更好的是,层级更加简单,因为我们不再使用LinearLayout,而且,更加高效了。当我们使用HierarchyViewer来比较两个实现版的时候,事实就更明显了:

    另外,当你使用这么一个布局作为ListView的列表项时,这种差异就更为重要了。希望这个简单的例子能让你了解布局,了解如何优化你的UI。
  • 大小: 5.8 KB
  • 大小: 706 Bytes
  • 大小: 4.6 KB
  • 大小: 737 Bytes
  • 大小: 4.6 KB
  • 大小: 730 Bytes
  • 大小: 79.5 KB
分享到:
评论

相关推荐

    Android布局技巧之创建高效布局

    执着于基本特征的使用对于创建UI来说,往往不是最高效的。一个常见的例子就是滥用LinearLayout,它将会导致View树中的View数量激增。View——更糟的是,布局管理器——添加到应用程序里都会带来一定的消耗:初始化,...

    JAVA布局模式:GridBagConstraints终极技巧

    在Java GUI编程中,设计美观且功能丰富的...熟练掌握这些属性和技巧,将有助于创建出高效、美观的Java Swing应用程序。通过不断的实践和探索,你将能够更好地利用`GridBagConstraints`来满足各种复杂的界面设计需求。

    变幻之美Div+CSS网页布局揭秘:案例实战篇

    通过《变幻之美Div+CSS网页布局揭秘:案例实战篇》,读者不仅能掌握Div和CSS的基础知识,还能进一步了解高级布局技巧,从而在网页设计领域游刃有余。书中提供的PDF文件和说明文件将为学习者提供丰富的资源,助力他们...

    CSS布局之道

    这个"CSS布局之道"的学习资源,会涵盖以上诸多方面,通过实例和练习,帮助初学者快速掌握CSS布局技巧,从而实现高效且美观的网页设计。在学习过程中,实践和理解每个概念,并结合实际项目应用,将有助于巩固和提升...

    Flexbox布局革命:打造响应式网页设计

    ### Flexbox布局革命:打造响应式网页设计 随着互联网技术的发展和移动设备的普及,响应式网页设计成为了网站开发中的...通过合理利用Flexbox的各种属性和技巧,开发者可以轻松创建出既美观又实用的响应式网页布局。

    DIV布局十大技巧以及DIV盒子模型

    在网页设计领域,`DIV`布局是构建网页结构的基础,...掌握这些`DIV`布局技巧和`DIV`盒子模型,将有助于创建整洁、高效且富有弹性的网页设计。在实际开发中,结合具体需求和场景灵活运用,可以使页面布局更加得心应手。

    QT 例程 布局管理

    在QT中,布局管理是构建高效、适应性强的用户界面的关键技术之一。本压缩包文件包含了一系列针对QT布局管理的学习资源,帮助初学者深入理解和实践这一功能。 布局管理在QT中主要是通过QLayout类来实现的,它允许...

    unigui入门教程3(布局的使用)

    - 网格布局:将控件按行和列进行组织,常用于创建表格或棋盘式的用户界面。 - 流式布局:控件按照设定的方向(水平或垂直)依次排列,当空间不足时自动换行,适用于展示列表或菜单。 - 相对布局:根据每个控件与...

    高效学习CSS布局之道244个范例源码

    通过逐步调试和修改源码,你可以逐步掌握各种布局技巧,提升网页设计的灵活性和效率。 总之,"高效学习CSS布局之道244个范例源码"是一份宝贵的教育资源,它将带你踏上精通CSS布局的道路。不论你是初学者还是经验...

    Android Studio实战:快速高效地构建Android应用

    通过阅读《Android Studio实战:快速高效地构建Android应用》,开发者不仅可以掌握Android Studio的使用技巧,还能了解到完整的Android应用开发流程,从而提升开发效率和应用质量。书中可能还会包含实际项目案例,...

    qt 最基础 最详细的 基本布局 源代码(2)

    Qt是一个强大的跨平台应用程序开发框架...总结来说,Qt的布局系统是其GUI开发的核心部分,帮助开发者高效地管理窗口小部件。通过深入学习和实践,你可以掌握布局的使用,从而创建出适应性强、用户体验良好的应用程序。

    CSS网站布局实录内含各色css布局样式

    2. 浮动布局:float属性常用于创建多列布局,元素会浮动到其父元素的左侧或右侧。 3. 定位布局:position属性(static、relative、absolute、fixed)可以控制元素相对于其正常位置或父元素的位置。 4. Flexbox布局:...

    高效学习CSS布局之道pdf

    通过《高效学习CSS布局之道》这本书,读者将不仅学习到以上知识点,还能掌握如何在实际项目中灵活运用这些技巧,构建出美观且功能完善的网页。书中的每个范例都是精心设计的实战案例,旨在帮助读者巩固理论知识,...

    android布局技巧

    ### Android布局技巧详解 在Android应用开发中,布局设计是构建用户界面的关键步骤。良好的布局不仅能够提升用户体验,还能优化应用性能。本文将深入探讨Android布局的技巧,帮助开发者掌握如何利用基本布局组件...

    完美的jquery页面布局

    在实践中,通过jQuery和jQuery Layout,我们可以实现如下的页面布局技巧: 1. **响应式布局**:根据设备屏幕大小调整布局,确保页面在不同设备上都能良好显示。 2. **动态调整**:允许用户在运行时改变布局,例如...

    pcb布局技巧,pcb布线技巧

    本篇文章将深入探讨“pcb布局技巧”和“pcb布线技巧”,帮助提升你的PCB设计技能。 首先,我们要理解PCB布局的基本原则。布局时应考虑以下几点: 1. **功能模块化**:将相同或相关的功能部件集中在一起,减少信号...

    android 相对布局

    4. 调试布局:使用Android Studio的预览功能,可以在设计视图中实时调整和预览布局效果,以确保布局在不同设备上表现一致。 总结来说,Android的相对布局是一个强大且灵活的工具,它让开发者能够更加自由地设计界面...

    ch05 Android布局

    理解并熟练掌握布局的使用对于创建美观且高效的用户界面至关重要。 本章节我们将深入探讨Android布局的各个方面,包括基本布局类型、嵌套布局、布局参数、动态布局以及性能优化等关键知识点。 一、基本布局类型 ...

    适合初学者的CSS网页布局技巧

    【CSS网页布局技巧详解】 对于初学者来说,掌握CSS网页布局是学习网页设计的基础。以下是一些适合初学者的实用CSS技巧,可以帮助你更高效地创建网页布局。 1. **浏览器差异处理**: - 不同浏览器对CSS的解析可能...

Global site tag (gtag.js) - Google Analytics