Android UI布局与控件及API Guide学习(一)

一、Android学习API指南:【了解】

1. 应用的组成部分   App Components

1.1. 应用的基本原理    App Fundamentals

1.2. Activity      Activities活动

1.2.1. 片段    Fragments

1.2.2. 加载器     Loaders

1.2.3. 任务和返回堆    Tasks and Back Stack

1.3. Service服务   Services

1.3.1. 绑定服务     Bound Services

1.3.2. AIDL   Android Interface Definition Language 

1.4. 内容提供者    Content Providers

1.4.1. 内容提供器基础   Content Providers Basics

1.4.2. 创建一个内容提供者     Creating a Content Provider

1.4.3. 日历提供者    Calendar Provider

1.4.4. 通信录提供者   Contact Provider

1.5. 意图和意图过滤器    Intents and Intents Filters

1.6. 进程和线程    Process and Threads 

1.7. 权限系统    Permissions

1.8. 窗口小部件    App Widgets

1.9. Android清单    Android Manifest

2. 用户界面     User Interface

2.1. 概述    Overview

2.2. 布局    Layout

2.2.1. 线形布局    Linear Layout

2.2.2. 相对布局    Relative Layout

2.2.3. 列表视图    ListView

2.2.4. 网格视图    GridView

2.3. 输入控件   Input Controls

2.3.1. 按钮    Buttons

2.3.2. 文本区域    Text Fields   

2.3.3. 复选框    Checkboxes

2.3.4. 单选按钮   Radio Buttons

2.3.5. 开关按钮   Toggle Buttons

2.3.6. 下拉列表   Spinners

2.3.7. 选择器    Pickers

2.4. 输入事件   Input Events

2.5. 菜单   Menus

2.6. 动作条   Action Bar

2.7. 设置     Settings

2.8. 对话框   Dialogs

2.9. 状态通知    Notifications

2.10. Toast通知   Toasts   

2.11. 搜索   Search

2.11.1. 创建一个搜索界面    Creating a Search Interface

2.11.2. 增加当前搜索提醒  Adding Recent Query Suggestions

2.11.3. 增加个性化提醒   Adding Custom Suggestions

2.11.4. 搜索配置   Searchable Configuration

2.12. 拖放操作    Drag and Drop

2.13. 可访问性    Accessibility

2.13.1. 应用程序的可访问性   Making Applications Accessible

2.13.2. 构建可访问性服务   Building Accessibility Services

2.14. 风格和主题   Styles and Themes

2.15. 自定义控件   Custom Components

3. 应用程序资源   App Resources

3.1. 概述   Overview

3.2. 提供的资源   Providing Resources

3.3. 对资源的访问   Accessing Resources

3.4. 运行时变化的处理   Handling Runtime Changes

3.5. 本地化   Localization

3.6. 资源类型   Resource Types

3.6.1. 动画   Animation

3.6.2. 状态颜色列表    Color State List

3.6.3. 图形处理类资源   Drawable

3.6.4. 布局   Layout

3.6.5. 菜单   Menu

3.6.6. 字符串   String

3.6.7. 样式    Style

3.6.8. 其他类型   More Types

4. 动画和图形    Animation  and Graphics

4.1. 概述   Overview

4.2. 属性动画   Property Animation

4.3. 补间动画   View Animation

4.4. 帧动画    Drawable Animation

4.5. 画布和绘制   Canvas and Drawables

4.6. OpenGL    OpenGL  ES

4.7. 硬件加速   Hardware Acceleration

5. 高性能计算   Computation

5.1. RenderScript编程   RenderScript 

5.2. RenderScript编程进阶    Advanced RenderScript

5.3. 运行时API说明    Runtime API Reference

6. 多媒体和照相机     Media and Camera

6.1. 媒体播放    Media Playback

6.2. 支持的媒体格式    Supported Media Formats

6.3. 音频捕获    Audio Capture

6.4. JET引擎    JetPlayer

6.5. 照相机      Camera

7. 定位和传感器    Location and Sensors

7.1. 定位和地图    Location and Maps

7.2. 定位策略    Location Strategies

7.3. 传感器概述    Sensors Overview

7.4. 手势传感器    Motion Sensors

7.5. 位置传感器    Position Sensors

7.6. 环境传感器    Environment Sensors

8. 通信   Connectivity

8.1. 蓝牙   Bluetooth

8.2. NFC通信   NFC

8.2.1. NFC基础   NFC Basics

8.2.2. NFC进阶   Advanced NFC

8.3. Wi-FI直连  Wi-Fi 2P

8.4. USB通信  USB

8.4.1. 附件模式 Accessory

8.4.2. 主机模式  Host

8.5. SIP协议   SIP

9. 文本输入法   Text and Input

9.1. 复制和粘贴    Copy and Input

9.2. 创建一个输入法    Creating an IME

9.3. 拼写检查器    Spelling Checker

10. 数据存储   Data Storage

10.1. 存储选项   Storage Options

10.2. 数据备份   Data Backup

10.3. 应用程序安装位置   App install Locaiton

11. 系统管理员   Administration

11.1. 硬件管理   Device  Policies

12. web应用   Web Apps

12.1. 概述    Overview

12.2. web应用的屏幕适配   Targeting Screens from Web Apps

12.3. 利用webview构建web应用   Building Web Apps in WebView

12.4. 调试web应用   Debugging Web Apps

12.5. web应用的优化   Best Practices for Web Apps 

13. 更好的策略

13.1. 一致性(兼容性)  Compatibility

13.2. 支持多屏幕   Supporting Multiple Screens

13.2.1. 适配指定屏幕    Distributing to Specific Screens

13.2.2. 屏幕兼容模式    Screen Compatibility Mode

13.3. 支持平板和手机   Supporting Tablets and Handsets

14. Google提供的服务  Google Services 

14.1. 应用程序内部付费机制

14.2. 应用程序内部付费机制概述 

14.3. 如何使用应用程序付费服务 

14.4. 订阅机制 

14.5. 安全与设计 

14.6. 测试应用程序付费服务 

14.7. 应用程序付费机制的管理 

14.8. 应用程序付费的相关API 

14.9. 应用程序许可机制

14.10. 许可机制概述 

14.11. 设置许可机制 

14.12. 在应用中增加许可 

14.13. 许可机制API 

14.14. Google软件商店服务 

14.15. 在Google Play中加过滤器 

14.16. 多APK支持 

14.17. 对APK附加文件的服务 

14.18. Google云消息服务

14.19. 如何使用google云服务 

14.20. 架构概述 

14.21. 演示教程 

14.22. Google云服务进阶 

14.23. 信息迁移 


二、布局的介绍:【了解】

1、在4.0以前版本中一共有五种布局,都是ViewGroup的子类。
     分别是AbsoluteLayoutRelativeLayoutLinearLayoutFrameLayoutTableLayout
     而  TableLayout是LinearLayout的子类。
    (中文分别是:绝对布局、相对布局、线性布局、帧布局、  表格布局)。
2、在2.2操作系统中将AbsoluteLayout过期。而目前FrameLayout、TableLayout也逐渐少用。
3、在4.0之后又新增GridLayout。(GridLayout最经典的案例是计算器界面)
      总之,Android中一共有六种布局
      目前推荐使用RelativeLayoutLinearLayout、GridLayout三种布局。


二、LinearLayout:【掌握】

(一)、概念:线性布局控制其中的控件或组件横向或纵向排列。
线性布局中, 每一行或每一列只能放一个控件 。并且线性布局不会换行。
当控件排列到窗体边缘,后面的控件就被隐藏,而不会显示出来。
        线性布局的 默认方向 是水平方向( Horizontal )。

(二)、LinearLayout的常用属性:
1. android:orientation :  定义布局内控件或组件的排列方向
  可选项:vertical 、 horizontal
2. android:layout_width   : 定义控件的宽度
可选项:fill_parent / match_parent/ wrap_content/绝对数值
备注:fill_parent / match_parent的效果完全一致,都是填充整个父控件。但是自2.2版本开始推荐使用 match_parent  。wrap_content指的是该控件的宽度正好包裹内容物。

3. android:layout_height   :  定义控件的高度
可选项:fill_parent / match_parent/ wrap_content/绝对数值
备注:fill_parent / match_parent的效果完全一致,都是高度填充整个父控件。wrap_content指的是该控件的高度正好包裹内容物。
4. android:id   : 设置控件的id。这样就可以在R.java中自动生成相应的值,
在程序中通过findViewById就可以调用。
设置id的格式为:android:id = "@+id/id的名字"

5. android:background   :  设置控件的背景颜色或背景图片
例如:android:background="#ffffff"
          android:background="@drawable/图片名称"
【备注:】
颜色有RGB颜色格式和ARGB格式。RGB是红绿蓝三原色。而ARGB是带alpha的三原色,
有透明度的三原色
#FFFFFF 代表白色
#000000  黑色
#FFFFFFFF   完全不透明
#00FFFFFF   完全透明
#88FFFFFF   半透明

6. android:layout_weight   :  设置控件的权重。即各控件在水平或者垂直方向上平均分配。
①.  LinearLayout特有的属性——android:layout_weight,它表示比重的意思,可实现百分比布局
如果控件为“match_parent”,则layout_weight的值与占用比重是反相关的,其值越大,它占用的比重越小。
③.  如果控件为“wrap_content”,则对比重的判断会变为正相关,即其值越小,占用的空间越少。 但是这种情况下,有时候不会严格地按照比重来显示,如果某个 View 中的内容过多,就会占用过多的 空间
备注: 如果是水平方向设置权重,要将android:layout_width设置为0dp,如果是垂直方向上使用权重,要将android:layout_height设置为0dp。否则权重容易受到高度或宽度的干扰而出现偏差。

7. android:gravity :   该属性用来控制该View的内容物的位置。
如果该属性是定义在布局节点中,则该布局中所有控件的位置都受到这个属性的控制。
如果该属性出现在Button、TextView、EditText等控件中,则用来控制这些控件上的文字的位置
可选项有:top、bottom、left、right、center_vertical、fill_vertical 、 center、fill等等。
【备注:】 本属性与android:layout_gravity不同。

8. android:layout_gravity  :  该属性用于设置控件相对于容器的对齐方式
可选项有:top、bottom、left、right、center_vertical、fill_vertical 、 center、fill等等。
这些可选项并不是适用于每一种布局 在垂直线性布局中,android:gravity为bottom不起作用;
而水平线性布局中,android:gravity为right不起作用。

【备注:】而本属性是android:layout_gravity属性,与 android:gravity 属性不同。

(三)、LinearLayout的特有属性:【重新归纳:去除公共属性后的 特有属性
①、android: orientation     布局管理器内组件的排列方式
②、 android:layout_weight     设置布局中控件所占的权重

(四)、 LinearLayout 子元素的特有属性:
①、android: layout_weight      子元素在 LinearLayout 中所占的权重
②、android:layout_gravity     子元素在 LinearLayout 中的对齐方式
Layout_weight属性的作用:它是用来分配剩余空间的一个属性,你可以设置它的权重。
很多人不知道剩余空间是个什么概念,下面说说剩余空间的概念。

剩余空间长度=总长度-已分配长度  

看下面代码: 
 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 
 

运行结果是: 



看上面代码:只有Button2使用了Layout_weight属性,并赋值为1,而Button1和Button3没有设置Layout_weight这个属性, 根据API,可知,他们默认是0.
下面我们就来讲,Layout_weight这个属性的真正的意思:Android系统先按照你设置的3个Button的高度Layout_height的值为wrap_content, 给你分配好他们3个的高度,然后会把剩下来的屏幕空间全部赋给Button2,因为只有它的权重值是1,别的都是0,这也是为什么Button2占了那么大的一块空间。 
有了以上的理解我们就可以对网上关于Layout_weight这个属性更让人费解的效果有一个清晰的认识了。 

我们来看这段代码: 

 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" > 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="#ff0000"
        android:text="1"
        android:textColor="@android:color/white" />
   
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:background="#cccccc"
        android:text="2"
        android:textColor="@android:color/black" />
   
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:background="#00ff00"
        android:text="3"
        android:textColor="#0000ff" />
 

3个文本框的都是 layout_width=“wrap_content "时,会得到以下效果 


按照上面的理解,系统先给3个TextView分配他们的宽度值wrap_content(宽度足以包含他们的内容1,2,3即可),然后会把剩下来的屏幕空间按照1:2:3的比列分配给3个textview,所以就出现了上面的图像。 
而当layout_width=“ fill_parent”时,如果分别给三个TextView设置他们的Layout_weight为1、2, 3的话,就会出现下面的效果: 


你会发现1的权重小,反而分的多了,这是为什么呢???网上很多人说是当layout_width=“fill_parent”时,weighth值越小权重越大,优先级越高,就好像在背口诀一样,其实他们并没有真正理解这个问题, 真正的原因是Layout_width="fill_parent"的原因造成的。 
依照上面的理解来分析:系统先给3个textview分配他们所要的宽度为fill_parent,也就是说 每一个控件都是填满它的父控件,这里就是屏幕的宽度.那么这时候的剩余空间=1个parent_width-3个parent_width= -2个parent_width (parent_width指的是屏幕宽度 ) .那么第一个TextView的实际所占宽度应该=1个parent_width + 它所占剩余空间的权重比例1/6 * 剩余空间大小(-2 parent_width)=2/3parent_width 
同理第二个TextView的实际所占宽度=1个parent_width + 2/6*(-2个parent_width)=1/3parent_width; 所以就是2:1:0的比列显示了。 
这样你也就会明白为什么当你把3个Layout_weight设置为1、2, 3的话,会出现下面的效果了: 


此时注意:
第三个直接不显示了,为什么呢?一起来按上面方法算一下吧: 
系统先给3个textview分配他们所要的宽度fill_parent,也就是说每一都是填满他的父控件,这里就 死屏幕的宽度 
那么这时候的剩余空间=1个parent_width-3个parent_width=-2个parent_width (parent_width指的是屏幕宽度 ) 
那么第一个TextView的实际所占宽度应该=fill_parent的宽度,即 
parent_width + 他所占剩余空间的权重比列1/6 * 剩余空间大小(-2 parent_width)=2/3parent_width 
同理第二个TextView的实际所占宽度=parent_width + 2/6*(-2parent_width)=1/3parent_width; 
第三个TextView的实际所占宽度=parent_width + 3/6*(-2parent_width)=0parent_width;所以就是2:1:0的比列显示了。 
第三个就直接没有空间了。 

自己总结: 
xmlns:tools=" http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".MainActivity" > 
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="2" />
  
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="3" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="4" />
 

运行结果: 


如果Buttn的layout_width=" wrap_content"的时候 剩余的空间就为正的,如果 weight越小所占的权重越小,所以占得比例就越小,例1和2 ;
如果Button的layout_width=" match_parent"的时候 剩余的空间就为负的, 如果weight越小所占的权重越大,所以占得比例就越大,例3和4 .

三、RelativeLayout:【 掌握

(一)、概念:指按着控件之间的相对位置来进行布局。
(二)、RelativeLayout特有属性:
1、android: gravity     设置布局容器内子控件的对齐方式    
2、android:ignoreGravity    设置布局管理器内哪个控件不受gravity属性的影响

(三)、RelativeLayout子元素的特有属性:
①、第一组:指兄弟控件之间的相对位置。该组属性的值是另一个控件的id。
layout_toRightOf      该控件在哪个控件的右侧
layout_toLeftOf        该控件在哪个控件的左侧
layout_above            该控件在哪个控件的上侧
layout_below            该控件在哪个控件的下侧
       ②、第二组:指 兄弟控件之间 的对齐关系。该组属性的值是另一个控件的id。
layout_alignRight      该控件与哪个控件右对齐
layout_alignLeft        该控件与哪个控件左对齐
layout_alignTop        该控件与哪个控件顶对齐
layout_alignBottom   该控件与哪个控件底对齐
layout_alignBaseLine  该控件与哪个控件基线对齐
       ③、第三组:指 控件与父布局 之间的对齐关系。该组属性的值是true或者false。
layout_alignParentRight               该控件与父布局中的控件右对齐吗?
layout_alignParentLeft                 该控件与父布局中的控件左对齐吗?
layout_alignParentTop                 该控件与父布局中的控件顶端对齐吗?
layout_alignParentBottom            该控件与父布局中的控件底部对齐吗?
layout_centerInParent                  该控件位于父布局中的控件中心位置吗?
layout_centerVertical                   该控件位于父布局中的垂直中心位置吗?
layout_centerHorizontal               该控件位于父布局中的水平中心位置吗?
【备注:】 sp、dp、dip、px等单位的区别 ?
dpi    dpi指像素密度。dots per inch  ,即每英寸内像素点的个数。它不是表示长度的单位。在android中认为:低(120dpi),中(160dpi),高(240dpi),超高(320dpi)。随着技术的增长,实际dpi已经超出这个定义范围。
px:pixel 像素
dip    device independent pixels  ,即与设备无关的像素目前这个单位已经被dp所取代,而不建议使用dip。
dp     与dip的概念一样。不过dp已经取代了dip。在Android中用来表示非文字大小的尺寸。例如:外边距、内填充等。
dp/dip:device independent pixel .
sp      scale  independent  pixel  ,即与缩放比例无关的像素。在android中常用来表示文字大小。
px      表示像素因为同样是200px,但是在不同手机下显示的大小是不同的
总之: dp是用来定义非文字的尺寸,sp用来定义文字大小。px只用于产生一条一像素的分割线时使用。
四.帧布局:FrameLayout:

你可能感兴趣的:(Android学习笔记)