`
liu86th
  • 浏览: 118027 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[转]技巧和设计模式 --- 视图和布局

 
阅读更多

1.越简单越好

 

 

如果一个窗口包含很多视图

 

[1] 启动动时间长

 

[2] 测量时间长

 

[3] 布局时间长

 

[4] 绘制时间长

 

 

如果视图树深度太深

 

[1] StackOverflowException

 

[2] 用户界面反应速度很慢

 

2.解决的办法

 

 

[1] 使用TextView的复合drawables减少层次

 

 

[2] 使用ViewStub延迟展开视图

 

[3] 使用<merge>合并中间视图

 

[4] 使用RelativeLayout减少层次

 

[5] 使用自定义视图

 

[6] 使用自定义布局

 

关于[1]

 



替代为

 


 

关于[2] 使用ViewStub延迟展开视图

 


首先在XML布局文件中定义 ViewStub

 

 

<ViewStub android:id = "@+id/stub_import"
android:inflatedId="@+id/panel_import"
android:layout="@layout/progress_overlay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"/>

 

 

在需要展开视图时

 

 

findViewById(R.id.stub_import).setVisibility(View.VISIBLE);
// 或者
View importPanel = ((ViewStub)
findViewById(R.id.stub_import)).inflate();
 

 

展开之后变成

 


 

关于[3]使用<merge>合并视图:略

 

关于[4]使用RelativeLayout减少层次,总得意思就是用RelativeLayout解决复杂的布局,比如代替LinearLayout复杂的布局

 

关于[5]自定义视图

 

 

class CustomView extends View {
    @Override
    protected void onDraw(Canvas canvas) {
        // 加入你的绘图编码
   }
    @Override
    protected void onMeasure(int widthMeasureSpec,
    int heightMeasureSpec) {
        // 计算视图的尺寸
        setMeasuredDimension(widthSpecSize, heightSpecSize);
    }
}

 

 

关于[6]自定义布局

 

 

class GridLayout extends ViewGroup {
    @Override
    protected void onLayout(boolean changed, int l, int t,
    int r, int b) {
        final int count = getChildCount();
        for (int i=0; i < count; i++) {
            final View child = getChildAt(i);
           if (child.getVisibility() != GONE) {
           // 计算子视图的位置
          child.layout(left, top, right, bottom);
          }
        }
     }
}
 

 

  • 大小: 18.8 KB
  • 大小: 29 KB
  • 大小: 26.2 KB
  • 大小: 35.1 KB
分享到:
评论

相关推荐

    (0163)-iOS/iPhone/iPAD/iPod源代码-视图布局(View Layout)-Tool Drawer

    在这个主题中,我们重点关注"(0163)-iOS/iPhone/iPAD/iPod源代码-视图布局(View Layout)-Tool Drawer",这显然涉及到自定义`UIToolbar`的设计和交互功能。`UIToolbar`是iOS中的一个标准组件,通常用于显示一...

    ListView下显示不同的布局视图

    同时,为了提高性能,通常会使用convertView(可复用视图)和ViewHolder设计模式,避免频繁创建新的视图对象。 对于描述中的“三个集合的数据”,这意味着ListView可能需要根据不同的数据集来显示不同布局。例如,...

    Android应用源码动态列表布局-IT计算机-毕业设计.zip

    在Android应用开发中,动态列表布局是常见的设计模式,尤其适用于数据展示丰富的场景,如通讯录、购物列表等。这份“Android应用源码动态列表布局”是一个毕业设计项目,旨在帮助学习者掌握如何在Android环境中创建...

    Android开发 - 布局

    在Android开发中,布局(Layout)是构建用户界面的核心元素,它定义了应用程序屏幕上各个组件的排列方式和相互关系。本篇文章将深入探讨Android布局的相关知识点,包括布局类型、布局属性、布局权重以及如何优化布局...

    移动应用UI设计模式(完整版)

    在这个完整版的移动应用UI设计模式资源中,可能会详细讲解每个模式的适用场景、设计原则和实现技巧。此外,还可能包含实际案例分析,让读者了解如何将这些模式应用于实际项目中。 总之,掌握移动应用UI设计模式对于...

    java课程设计实例--计算器 报告 代码 一应俱全

    - **MVC模式**:模型-视图-控制器(Model-View-Controller)设计模式可能被用于组织代码,其中模型处理计算逻辑,视图负责显示,控制器则协调两者之间的交互。 7. **报告部分** - **设计思路**:报告可能包含了...

    _基于Dreamweaver软件的网页布局模式.pdf

    设计者应根据项目的需求和目标,灵活运用这些布局技巧,以实现最佳的用户体验。 总的来说,Dreamweaver作为强大的网页设计工具,提供了多样化的布局方式,帮助设计师实现创意并创建符合现代网页标准的页面。随着...

    PADS9 3D视图教程

    - 检查元器件的位置和方向是否在2D布局和3D视图中保持一致。 - 确认所有元器件的高度信息都已正确输入。 #### 五、总结 PADS9.0引入的3D视图功能极大地提高了PCB设计的可视化程度,使得设计师能够更直观地评估...

    Android应用源码之仿网易布局-IT计算机-毕业设计.zip

    在本项目中,"Android应用源码之仿网易布局...通过研究这个毕业设计项目,学生不仅可以学习到Android应用的基础开发技巧,还能掌握到高级特性,如数据绑定和现代架构模式,有助于提升其在Android开发领域的专业素养。

    Ext本地编辑布局-界面生产器

    ExtJS基于MVC(模型-视图-控制器)设计模式,这使得代码组织清晰,易于维护。 本地编辑布局是ExtJS中的一个特性,它允许开发者在本地环境中对界面元素进行实时编辑。这种布局模式强调了拖放功能,使得开发人员可以...

    Android应用源码之动态交叉布局demo-IT计算机-毕业设计.zip

    9. **响应式设计**:动态交叉布局可能会涉及响应式设计原则,使界面能在横屏和竖屏模式下自动调整,也可能包含对不同屏幕分辨率的优化。 10. **毕业设计论文**:在完成源码开发后,学生还需要撰写毕业设计论文,...

    ios-label 流水布局.zip

    在iOS开发中,"流水布局"(Waterfall Layout)是一种常见的UI设计模式,它通常用于展示商品列表或者图片网格,让界面看起来更有层次感和视觉吸引力。这种布局方式的特点是每一列的高度根据内容自适应,使得屏幕空间...

    Access2003中文版应用基础教程part2

    ■本书详细介绍了Access2003中文版的基本使用方法和技巧 ■语言简洁,层次清晰,基础知识与实例相结合,边学边练 ■实例丰富,操作步骤详细,读者只要按步操作,就能保证成功 ■每章安排了大量的练习题,针对性强,...

    Access2003中文版应用基础教程part1

    ■本书详细介绍了Access2003中文版的基本使用方法和技巧 ■语言简洁,层次清晰,基础知识与实例相结合,边学边练 ■实例丰富,操作步骤详细,读者只要按步操作,就能保证成功 ■每章安排了大量的练习题,针对性强,...

    IOS应用源码Demo-支持从左右上下四个方向划出子视图的效果-毕设学习.zip

    6. MVC模式:模型-视图-控制器(MVC)是iOS开发中的核心设计模式,它将数据、用户界面和业务逻辑分离,提高了代码的可维护性和可扩展性。 7. Xcode:作为iOS开发的主要工具,Xcode包含了代码编辑器、模拟器、调试器...

    vxe-table vue表格解决方案 v2.11.0.zip

    - **强大编辑功能**:支持单元格编辑、行编辑和表单模式,满足不同编辑需求。 - **数据操作**:包括排序、过滤、合并、展开、固定列等,方便数据处理和展示。 - **响应式布局**:自动适应不同设备和屏幕尺寸,...

    android界面布局设计

    同时,掌握数据绑定和动态加载内容到布局中的技巧也是必要的,例如使用RecyclerView展示列表数据,通过Adapter和ViewHolder模式提高性能。 总之,Android界面布局设计是一个综合性的主题,涵盖从基本布局到高级...

    Android 一个登陆和注册界面-IT计算机-毕业设计.zip

    - MVC(模型-视图-控制器)或MVVM(模型-视图-ViewModel)设计模式可能被用来组织代码结构,使项目更易于维护。 9. **安全与隐私** - 注册和登录过程应考虑数据加密,如使用HTTPS协议保护用户信息的安全。 10. *...

    Android-在简单的日历视图中可折叠的CalendarView

    - 考虑到横屏和竖屏模式,可能需要设计不同的布局。 8. **主题和样式**: - 可以通过设置自定义的主题和颜色资源来改变日历的外观,以匹配应用的整体风格。 9. **测试和调试**: - 在多种设备和Android版本上...

Global site tag (gtag.js) - Google Analytics