• Android基础之七:UI开发


    • 需要用到的编程元素
      • 视图:View,可视化元素的基类,所有组件、视图等都是由View派生出去的
      • 视图组:ViewGroup,是View的扩展,可以包括多个子视图
      • Fragment:类似于前期的Activity碎片,拥有独立的布局,但是需要绑定到Activity上
      • Activity:基本显示单元,用于显示界面
    • 布局
      • 布局管理器是基于ViewGroup的扩展,用来控制子控件的位置,是能够嵌套的
      • 一个布局通常用单独的布局文件来定义,实现代码与资源的分离化,便于管理
      • Android SDK中提供了许多布局类,可以通过使用这些布局类来实现布局,也可以修改这些类,创建自己的布局
        • FrameLayout
          • 最简单的布局管理器
          • 基于左上角布局
          • 通过gravity可以改变位置
          • 重叠布局
          • margin属性定义位置无效
        • LinearLayout
          • 线性布局
          • 必须定义布局方向:oritation
          • 一行或一列只能有一个视图组件
          • 可以通过margin或gravity来定义位置
        • RelativeLayout
          • 相对布局
          • 最灵活的布局,能够实现布局相对于屏幕边界距离来布局
          • 默认相对top,left布局
          • 当然子布局也可以相对于其他组件定位
        • GridLayout
          • 举矩形网格布局
          • Android4.0以后才可以使用
          • 简化了布局嵌套
      • 定义布局
        • 在layout资源文件夹中创建xml布局文件来实现布局的编辑
        • 一般根元素是LinearLayout
        • 其中常用属性与值
          • wrap_contant:用于设置width或height值,表示根据内容计算
          • match_parent:用于设置width或height值,表示与父元素大小一样
          • fill_parent:用于设置width或height值,表示填充到与父元素允许的大小,与match_parent基本相同
          • gravity:内部元素的位置
          • layout_gravity:自身相对于父元素的位置,注意在FrameLayout中不起作用
          • textAllCaps:字母大小写显示标志
          • hint:类似于placeholder,水印提示
          • entries:adapter适配器填充,用于列表组件等填充数据
      • 代码创建布局(虽然强烈建议不要使用)
        • 每个布局元素都有对应的类,通过这些类能够实现代码中构造布局
        • 实例代码
        • LinearLayout linearLayout=new LinearLayout(MyActivity.this);
          TextView tv=new TextView(MyActivity.this);
          LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(100,50);
          linearLayout.addView(tv,layoutParams);
        • 通过findViewById来获取contView布局文件中的子元素
        • 布局文件xml转换成view
          • LayoutInflator类是专门用于将layout布局文件解析成View实例的工具类
          • 获取LayoutInflator实例的方法
            • Activity中getLayoutInflator()
            • 内部静态方法LayoutInflator.from(context)
            • 系统Service获取:(LayoutInflator)getSystemService(Context.LAYOUT_INFLATOR_SERVICE);
      • 布局嵌套
        • 填充布局开销非常大,复杂的界面需要使用大量的布局去嵌套
        • 注意规避UI布局的冗余
        • 减少不必要的父元素,例如FrameLayout子元素只有一个LinearLayout,那么这个FrameLayout还有什么意义,等等。。
        • 布局填充merge与include结合使用
          • include是将一个布局插入到另一个布局中的用法
          • 子布局父元素设置为FrameLayout等布局都是比较消耗资源的,可以使用merge代替根元素,merge在填充的时候会自动删除
        • 不要使用太多的View,太多的View填充需要消耗大量时间和资源,影响程序响应速度,单个不居中包含的View不能超过80个,越少越好
        • 如果存在大量的view,那么就用ViewStub来控制暂时不需要显示的view
        • ViewStub
          • ViewStub能够创建暂时不需要显示的View布局,可以动态创建,也可以布局文件静态配置
          • 当需要显示的时候通过ViewStub实例的inflate或者setVisibility来显示
          • inflate与setVisibility的区别
            • inflate只能填充一次,用于视图的填充,填充后会被置空,不能第二次调用inflate方法,否则会抛出异常
            • setVisibility能够多次显示隐藏控制ViewStub,因此建议使用setVisibility
          • ViewStub中的元素只有在被填充后才能通过findViewById来获取,否则会抛异常
      • 拆分布局Fragment
        • Fragment是新一代碎片组件,取代了最初的Activity碎片的设计,比Activity更轻量,有用自己完整的生命周期
        • Fragment能过实现不同屏幕大小设备创建灵活的UI
        • 每个Fragment是独立的模块,并且是绑定在Activity上的,关系是多对多
        • Fragment是在Android3.0以后出现的,在3.0以前如果使用必须继承自FragmentActivity
        • Fragment的使用
          • 创建
            • 创建一个继承自Fragment的类,在Android3.0以后是android.app.Fragment;之前是android.support.v4.app.Fragment
            • 在onCreateView中填充需要的布局
            • 创建Fragment自己的布局文件资源,可以创建不同屏幕大小的资源,在onCreateView中动态判断填充的资源
        • Fragment的生命周期
          • onAttach:将Fragment绑定到Activity上
          • onCreate:创建
          • onCreateView:填充视图
          • onActivityCreated:Activity填充完毕
          • onResume
          • onPause
          • onSaveStateInstance
          • onStop
          • onDestoryView:清空视图
          • onDestory:销毁
          • onDetach:解除绑定
        • Fragment与Activity通信
  • 相关阅读:
    [转]OnKeyDown Numeric Validator CLIENT SIDE
    [转]ng-grid
    死锁
    MySQL中间层 Atlas
    构建高性能web之路------mysql读写分离实战
    springboot读写分离--temp
    MySQL数据库的同步配置+MySql读写分离
    JMX学习笔记(二)-Notification
    kafka之四:Kafka集群搭建
    Synchronized之四:Synchronized的可重入性
  • 原文地址:https://www.cnblogs.com/xl-xlg/p/5045631.html
Copyright © 2020-2023  润新知