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通信
时间: 2024-08-16 14:06:31

Android基础之七:UI开发的相关文章

<Android基础>(五) UI开发 Part 2

ListView 1)ListView的简单用法 2)定制ListView界面 3)提升ListView的运行效率 4)ListView的点击事件 3.5 ListView 3.5.1 ListView的简单用法 1.新建项目,修改activity_main.xml中的代码,插入<ListView>控件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=

&lt;Android基础&gt;(四) UI开发 Part 1

1.常用控件 1)TextView 2)Button 3)EditText 4)ImageView 5)ProgressBar 6)AlertDialog 7)ProgressDialog 2.四种布局 1)LinearLayout 2)RelativeLayout 3)FrameLayout 4)百分比布局 3.自定义控件 1)引入布局 2)创建自定义控件 先占个坑,word发布图片出现了问题,后续补上. 不管有没有人看,也算是兜兜转转终于做到了自己想做的东西,继续加油吧! 原文地址:http

Android基础——基本UI控件:

两种文本框:EditText,TextView, 两种按钮:Button,ImageButton, 单选按钮/单选按钮组:RadioButton,RadioGroup 复选框:CheckBox <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:a

Android基础——高级UI组件:图像视图和图片切换器

layout代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.

Android基础——高级UI组件:下拉框,列表,滚动条视图

布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.andr

Android基础——高级UI组件:选项卡

布局文件 <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.c

Android与Swift iOS开发:语言与框架对比

Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有SwiftyGPIO库,可以通过GPIO控制一些硬件. Object C is old and ugly,oc是1983年苹果推出的,过于陈旧和臃肿. Swift语法类似Scala,Javascript ES6, Java,OC, C++, Python 这是tiobe发布的编程语言排行 Swift支持

Android基础之五:四大组件(Broadcast Receiver)

Broadcast Receiver作为Android四大组件之一,在整个系统中广泛运用,系统中存在各种各样的广播机制,例如下载,网络等都有具体的广播接收器 广播在很大程度上简化了开发,可以通过广播监听系统状态变化,监听另一App中事件传递,可以接收当前App中不同组件,不同UI.不同线程之间的消息传递 广播的创建与使用 创建一个继承自BroadcastReceiver类的子类,重写onReceiver方法 public class MReceiver extends BroadcastRece

从Java/Android到Swift iOS开发:语言与框架对比

本文是我在『移动前线』微信群2016年4月28日的分享总结整理. 我从2009年开始做Android开发,开始接触Swift是在2014年底,当时组里曾经做过一个Demo App,感觉技术还不够成熟没有正式发布.2016年初我们正式使用swift开发上线了销售助手App产品,积累了比较丰富的swift项目实战经验,开源框架都是用的swift版本,大量使用了面向协议和函数式编程.iOS App开发人员基本都是以前安卓版本的开发人员,同时维护安卓和iOS 2个版本,效率很高. 今天分享的主题是Jav