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属性的作用:它是用来分配剩余空间的一个属性,你可以设置它的权重。
很多人不知道剩余空间是个什么概念,下面说说剩余空间的概念。

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

看下面代码: 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:text="one" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:gravity="center"
android:text="two" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:text="three" />
</LinearLayout> 

运行结果是: 



看上面代码:只有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这个属性更让人费解的效果有一个清晰的认识了。 

我们来看这段代码: 

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android=" http://schemas.android.com/apk/res/android
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" > 
<TextView
        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" />
    <TextView
        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" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:background="#00ff00"
        android:text="3"
        android:textColor="#0000ff" />
</LinearLayout> 

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的比列显示了。 
第三个就直接没有空间了。 

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

运行结果: 


如果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:


一、View类的常用xml属性:【了解】

①.Android中所有的UI(用户界面)元素都是使用View和ViewGroup对象建立的
.View是一个可以将一些信息绘制在屏幕上并与用户产生交互的对象
③.ViewGroup是一个包含多个的View和ViewGroup的容器,用来定义UI布局。
④.Android提供了一系列的View和ViewGroup的子类,开发者可以灵活地组合使用它们来完成界面布 局、界 面元素绘制和用户交互等工作
⑤.开发者还可以选择性地继承一些系统提供的View,来自定义View,把自己定义的界面元素显示给用户。
   UI视图结构
      

(一)、类结构:

java.lang.Object
   ↳  android.view.View

(二)、View及其子元素常用属性:(各种布局及控件的共同属性)
    1. android:id
    2. android:background 背景图或背景色
    3. android:onClick     为该控件的单击事件绑定监听器
    4. android:padding    设置控件四周的填充区域
    5. android:visibility    设置该控件是否可见
    6. android:alpha        设置该组件透明度
    7. android:layout_height      子组件的布局高度
    8. android:layout_width        子组件的布局宽度
    9. android:layout_margin     设置子组件的外边距
( 三 ).Android中UI布局的嵌套【掌握】
Android的UI开发使用层次模型来完成,一般都是在一个ViewGroup中嵌套多层ViewGroup,每一层中含有任意数目的View。


注意:嵌套层次不要超过10层,否则会大幅降低运行效率,上图为3
二、Android UI控件:

(一)、控件名称:【标红色的为常用的】
    1. TextView        文本视图
    2. EditText         文本编辑框
    3. Button            按钮
    4. ImageView、Gallery   图像视图、画廊(建议过期)
    5. ImageButton    图片按钮
    6. ToggleButton 、Switch    开关按钮、开关
    7. RadioButton    单选按钮
    8. CheckBox       多选框
    9. Spinner           下拉列表
    10. AutoCompleteTextView   自动完成文本框
    11. ProgressBar    进度条
    12. SeekBar          拖动条
    13. RatingBar        星级评分条
    14. TimePicker、DatePicker   时间选择器、日期选择器
    15. AnalogClock、DigitalClock    模拟时钟、数字时钟
    16. Dialog(AlertDialogProgressDialog、TimePickerDialog、DatePickerDialog)提示对话框、进度对话框、时间选择对话框、日期选择对话框
    17. ListView、GridView        列表视图【最重要的UI组件】、 网格视图 
    18. ScrollView      滚动视图
    19. ExpandableListView   可展开列表视图
    20. WebView        网页视图
    21. SearchView    搜索框
    22. TabHost         书签选项卡
    23. Notification 、Toast         通知 、 吐司(短时提醒)    
    24. Menu(OptionMenu /SubMenu、ContextMenu)    菜单(选项菜单、上下文菜单)
    25. ImageSwitcher、TextSwitcher      图像切换器、文本切换器
    26. ActionBar        动作导航条
三、基本控件:——TextView【掌握】

(一)、TextView类结构:
java.lang.Object
   ↳ android.view.View
    ↳ android.widget.TextView


(二)、TextView 常用属性:
1、andorid:text   设置文本的内容
2、 android:textColor      设置文本的颜色
3、 android:textSize         设置文本的字体大小(sp)
4、andorid:height            设置文本的高度,以像素为单位
5、 android:width             设置文本的宽度,以像素为单位
6、 android:inputType     设置文本的类型。例如是普通文本,还是email,password,数字等。
7、 android:singleLine      设置文本是否是单行显示。
8、android:gravity     设置文本框内文本的对齐方式。
     可选项有:top、bottom、left、right、center、fill、center_vertical、center_horizontal、  fill_horizontal等等。这些属性值也可以同时指定,各属性值之间用竖线隔开。例如right|bottom
9、android:drawableLeft    用于在文本框左侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
10、android:drawableRight    用于在文本框左侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
11、android:drawableTop    用于在文本框上侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
12、android:drawableBottom   用于在文本框下侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
13、android:autoLink   给指定的文本增加可单击的超链接。可选项为:none、web、email、phone、map和all。
14、android:hint    设置当文本框内文本内容为空时,默认显示的提示性文字。

( 三 ).TextView显示富文本:

// 将HTML的界面设置为TextView的内容

tv.setText(Html.fromHtml(sb.toString()));

// 使TextView内部的超链接可以响应用户的点击

tv.setMovementMethod(LinkMovementMethod.getInstance());


四、基本控件:——EditText【掌握】

(一)、 EditText 类结构:
java.lang.Object
   ↳ android.view.View
    ↳ android.widget.TextView
      ↳ android.widget.EditText

 所以 EditText 继承了TextView的所有属性。常用属性:

(二)、android:inputType的可选项:
  1. android:inputType="textPersonName
  2. android:inputType="textPassword
  3. android:inputType="numberPassword
  4. android:inputType="textEmailAddress
  5. android:inputType="phone
  6. android:inputType="textPostalAddress
  7. android:inputType="time
  8. android:inputType="date
  9. android:inputType="number
(三)、EditText常用方法:
    1、setText ()
    2、getText ()

五、基本控件:——Button【掌握】

(一)、Button类结构:
java.lang.Object
   ↳ android.view.View
     ↳ android.widget.TextView
       ↳ android.widget.Button

 所以Button继承了TextView的所有属性。

六、Android事件处理的概述【掌握】
    (一)、概念:
        在Android中,我们可以通过事件处理使UI与用户互动(UI Events)。
具体形式则是以事件监听器(event listener)的方式來“监听”用户的动作。
        Android提供了非常良好的UI事件处理机制。View是绘制UI的类,每个View对象都可以向Android注册一个事件监听器。每个事件监听器都包含一个回调方法(callback method)这个回调方法(callback method)主要的工作就是回应或处理用户的操作。

    (二)、Android  UI事件处理的两套机制:
    1、基于监听和回调的事件处理机制(event listener):
       就是为Android中的控件绑定特定的事件监听器。一旦该控件监听到有相应的动作发生,则该动作会触发事件监听器,而该监听器会调用内部的回调方法做出相应的响应。事件监听器的核心就是它内部包含的回调方法。        
    2、另外一种UI事件的机制为事件处理器event handler
event handler与event listener是不一样的处理机制。后续课程中会讲到多线程的Handler、Looper消息传递机制。
(三)、Android种常用的事件监听器及其回调方法(callback method):
View.OnClickListener   :           onClick()                     单击事件
View.OnLongClickListener    :     onLongClick()            长按事件
View.OnFocusChangeListener :onFocusChange()     焦点改变事件
View.OnKeyListener          :          onKey()                      按键事件
View.OnTouchListener          :      onTouch()                  触摸屏事件
View.OnCreateContextMenuListener:  onCreateContextMenu()     创建上下文菜单事件
    【备注:】请同学们在这里增添新学到的事件监听类:
1、RadioGroup.OnCheckedChangeListener             单选按钮组的勾选项改变监听器
2、CompoundButton.OnCheckedChangeListener     多选框勾选项改变监听器
3、AdapterView.OnItemSelectedListener                  下拉列表框条目被选中监听器
4、AdapterView.OnItemClickListener                         ListView的条目单击监听器
5、AdapterView.OnItemClickListener                         GridView的条目单击监听器
6、DatePicker.OnDateChangedListener                     DatePicker的日期改变监听器
7、AbsListView.OnScrollListener                               ListView的滑动监听器

七、事件监听器的几种写法示例:
【备注:】其实事件监听器,就是实现了一个特定接口的Java类的实例。

监听器--->事件--->事件源
消防队--->着火--->房子

实现事件监听器有几种形式:
1、内部类形式;
2、外部类形式;
3、Activity实现监听器接口,自身作为事件监听器类;
4、匿名内部类的形式创建事件监听器,并实现监听器内的方法。
    (Android开发中常用匿名内部类作为监听器
以按钮的单击事件为例:
1.在xml文件里,设置onClick属性-->在代码中:添加相应的方法,必须带view参数;
2.匿名内部类的方式:
bt2.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
   Toast.makeText(getApplicationContext(), "2222被点击了", 0).show();
  }
 });
3.写一个内部类:
4.activity实现onClickListener接口:
bt4.setOnClickListener(this);
 @Override
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.btn_click4:
    Toast.makeText(getApplicationContext(), "444被点击了", 0).show();
   break;
  default:
   break;
  }
 }  
八、基本控件:——ImageView:
        (一).ImageView的类结构
java.lang.Object
    ↳ android.view.View
        ↳ android.widget.ImageView
    (二).ImageView的常用属性:
①、andorid:src  设置图片来源。属性值为android:src="@drawable/图片名称"
②、android:adjustViewBounds  用于设置 ImageView 是否调整自己的边界,来保持所显示图片的长宽比例。属性值为true或false
③、 android:maxHeight  设置 ImageView 的最大高度。需要先设置android:adjustViewBounds为true,否则不起作用。
④、andorid:maxWidth   设置 ImageView 的最大宽度。需要先设置android:adjustViewBounds为true,否则不起作用。
⑤、 android:scaleType   设置所显示的图片如何缩放或移动,以适应ImageView的大小。

设置所显示的图片如何缩放或移动,以适应ImageView的大小。可选项:fitCenter、fitStart 、 fitEnd、 fitXY 、 center、centerCrop、centerInside、matrix
  • matrix  保持原图大小、从左上角的点开始,以矩阵形式绘图。 
  • fitXY :把图片按照指定的大小在View中显示,拉伸显示图片,不保持原比例填满View. 
  • fitStart :把图片按比例扩大(缩小)到View的宽度,显示在View的上部分位置 
  • fitCenter :把图片按比例扩大(缩小)到View的宽度,居中显示 
  • fitEnd :把图片按比例扩大(缩小)到View的宽度,显示在View的下部分位置 
  • Center : 以原图的几何中心点和ImagView的几何中心点为基准,按图片的原来size居中显示不缩放, 当图片长/宽超过View的长/宽,则截取图片的居中部分显示ImageView的size. 当图片小于View 的长宽时,只显示图片的size,不剪裁。 
  • centerCrop :以原图的几何中心点和ImagView的几何中心点为基准,按比例扩大(图片小于View的宽时)图片的size。 居中显示,使得图片长 (宽)等于或大于View的长(宽),并按View的大小截取图片。 当原图的size大于ImageView时,按比例缩小图片,使得长宽中有一向等于ImageView,另一向大于ImageView。 实际上,使得原图的size大于等于ImageView 
  • centerInside (用得多):以原图的几何中心点和ImagView的几何中心点为基准,将图片的内容完整居中显示, 通过按比例缩小原来的size使得图片长(宽)等于或小于ImageView的长(宽)
备注:如果想设置图片为固定大小,并且要保持图片的宽高比,则:
①. 设置adjustViewBounds属性为true;
②. 设置maxHeight,maxWidth;
③. 设置layout_width="wrap_content",layout_height="wrap_content".
(三)、ImageView常用方法:
1、setImageBitmap()
2、setImageDrawable()
3、setImageResource()
九、基本控件:——ImageButton:
  1. ImageView常用的属性
  2. ImageViewscaleType属性
java.lang.Object
    ↳ android.view.View
        ↳ android.widget.ImageView
    ↳ android.widget.ImageButton

十、基本控件:——CheckBox:
(一)、 类结构介绍:
java.lang.Object
   ↳ android.view.View
    ↳ android.widget.TextView
      ↳ android.widget.Button
        ↳ android.widget.CompoundButton
          ↳ android.widget.CheckBox

CheckBox继承于Button,所以具有普通按钮的各种属性,但是与普通按钮不同的是, CheckBox 提供了可选中的功能。
【备注:】CheckBox有一个父类是CompoundButton,所以在使用监听器的时候要注意跟单选项进行区别。

(二)、核心代码:

  A. UI的代码:

    <CheckBox
        android:id="@+id/checkBox_main_hobby1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="学习" />

    <CheckBox
        android:id="@+id/checkBox_main_hobby2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="睡觉" />

    B. java代码:

    // 因为多选框中有多个控件都使用同一个监听器,所以不使用匿名监听器,而单独定义一个有名字的监听器对象。
OnCheckedChangeListener listener = new OnCheckedChangeListener() {
     //[备注:]这个 OnCheckedChangeListener监听器与单选的监听器,虽然名字一样,但是属于两个不同包中的监听器。
     //单选项中是:android.widget.RadioGroup.OnCheckedChangeListener
     //而多选项中是android.widget.CompoundButton.OnCheckedChangeListener
@Override
public void onCheckedChanged(CompoundButton buttonView , boolean isChecked) {
// 该方法中的第一个参数是当前被监听的多选项按钮,第二个参数是监听到的状态,也就是该选项是否给勾选(如果勾选了,则这个值是true,否则是false)。
if (isChecked) {
System.out.println("==您勾选了:==>" + buttonView.getText());
} else {
System.out.println("==您取消了:==>" + buttonView.getText());
}

}
   };

checkBox_main_hobby1.setOnCheckedChangeListener(listener);
checkBox_main_hobby2.setOnCheckedChangeListener(listener);

     // 多选按钮不仅可以使用OnCheckedChangeListener监听器来获取被勾选的内容,也可以通过按钮的单击监听器来监听。
button_main_submit.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// 实例化一个StringBuilder对象,则勾选的各项内容组成一个字符串。
StringBuilder sb = new StringBuilder();
// 多选框中有一个方法isChecked(),是判断该选项是否被勾选。如果勾选则返回true,如果取消勾选则返回false

// 多选项中没有多选项Group这个概念,所以要逐一去判断每一个选项的勾选状态
if (checkBox_main_hobby1.isChecked()) {
sb.append(checkBox_main_hobby1.getText().toString());
}
if (checkBox_main_hobby2.isChecked()) {
sb.append(checkBox_main_hobby2.getText().toString());
}
if (checkBox_main_hobby3.isChecked()) {
sb.append(checkBox_main_hobby3.getText().toString());
}
if (checkBox_main_hobby4.isChecked()) {
sb.append(checkBox_main_hobby4.getText().toString());
}

System.out.println("==您的爱好是:==>" + sb.toString());
}
});
    
十一、基本控件:——RadioButton:
(一)、类结构介绍:
java.lang.Object
   ↳ android.view.View
    ↳ android.view.ViewGroup
      ↳ android.widget.LinearLayout
        ↳ android.widget.RadioGroup

java.lang.Object
   ↳ android.view.View
    ↳ android.widget.TextView
      ↳ android.widget.Button
        ↳ android.widget.CompoundButton
          ↳ android.widget.RadioButton

RadioButton继承于Button,所以具有普通按钮的各种属性,但是与普通按钮不同的是,RadioButton提供了可选中的功能。在使用RadioButton的时候,要使用RadioGroup来包围起这些RadioButton
【备注:】RadioGroupLinearLayout的子类,所以RadioGroup本质上是一个存放RadioButton的布局容器。
需要记住的是:默认的LinearLayout布局的Orientation属性是水平的,而默认的RadioGroup的Orientation属性是垂直的。

(二)、重点记忆的类方法:
1、RadioGroup类中的getCheckedRadioButtonId()

十二.其它布局控件

(一).FrameLayout帧布局
①. 帧布局中的每一个组件都代表一个画面
② .默认以屏幕左上角作为(0, 0)坐标,按组件定义的先后顺序依次逐屏显示,后面出现的会覆盖前面的画面。
③. 用该布局可以实现动画效果。
④. FrameLayout的一个子类——TabHost很常用,可以实现导航界面
(二).GridLayout网格布局
(三). AbsoluteLayout绝对布局
①. AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的绝对位置
②. 这种布局简单直接,直观性强
③. 使用android:layout_x属性来确定X坐标,以左上角为顶点。使用android:layout_y属性确定Y坐标,以左上角为顶点。
④. 如果子元素不设置layout_x和layout_y,那么它们的默认值是0,会出现在左上角。
⑤. 由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差,不推荐使用
(四). TableLayout 表布局
①. TableLayout属于行和列形式的管理控件,每行为一个TableRow对象,也可以是一个View对象。
②. 在TableRow中还可以继续添加其他的控件,每添加一个子控件就成为一列。TableLayout不会生成边框。

十三.TextView常用属性
android:autoLink :设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web /email/phone/map/all)
android:autoText :如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。
android:bufferType : 指定getText()方式取得的文本类别。选项editable 类似于StringBuilder :可追加字符,也就 是说getText后可调用append方法设置文本内容。spannable :则可在给定的字符区域使用样式,参见这里1、这里2。
android:capitalize :设置英文字母大写类型。此处无效果,需要弹出输入法才能看得到,参见EditView此属性说明。
android:cursorVisible:设定光标为显示/隐藏,默认显示。
android:digits:设置允许输入哪些字符。如“1234567890.+-*/% ()”
android:drawableBottom:在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者。
android:drawableLeft:在text的左边输出一个drawable,如图片。
android:drawablePadding:设置text与drawable(图片)的间隔,与drawableLeft、 drawableRight、drawableTop、drawableBottom一起使用,可设置为负数,单独使用没有效果。
android:drawableRight:在text的右边输出一个drawable。
android:drawableTop:在text的正上方输出一个drawable。
android:editable:设置是否可编辑。
android:editorExtras:设置文本的额外的输入数据。
android:ellipsize:设置当文字过长时,该控件该如何显示。有如下值设置:”start”—?省略号显示在开头;”end” ——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动)
android:freezesText:设置保存文本的内容以及光标的位置。
android:gravity:设置文本位置,如设置成“center”,文本将居中显示。
android:hintText:为空时显示的文字提示信息,可通过textColorHint设置提示信息的颜色。此属性在 EditView中使用,但是这里也可以用。
android:imeOptions:附加功能,设置右下角IME动作与编辑框相关的动作,如actionDone右下角将显示一个“完成”,而不设置默认是一个回车符号。这个在EditView中再详细说明,此处无用。
android:imeActionId:设置IME动作ID。
android:imeActionLabel:设置IME动作标签。
android:includeFontPadding:设置文本是否包含顶部和底部额外空白,默认为true。
android:inputMethod:为文本指定输入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,但是这里报错找不到。
android:inputType:设置文本的类型,用于帮助输入法显示合适的键盘类型。在EditView中再详细说明,这里无效果。
android:linksClickable:设置链接是否点击连接,即使设置了autoLink。
android:marqueeRepeatLimit:在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为 marquee_forever时表示无限次。
android:ems:设置TextView的宽度为N个字符的宽度。这里测试为一个汉字字符宽度
android:maxEms:设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。
android:minEms:设置TextView的宽度为最短为N个字符的宽度。与ems同时使用时覆盖ems选项。
android:maxLength:限制显示的文本长度,超出部分不显示。
android:lines:设置文本的行数,设置两行就显示两行,即使第二行没有数据。
android:maxLines:设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。
android:minLines:设置文本的最小行数,与lines类似。
android:lineSpacingExtra:设置行间距。
android:lineSpacingMultiplier:设置行间距的倍数。如”1.2”
android:numeric:如果被设置,该TextView有一个数字输入法。此处无用,设置后唯一效果是TextView有点击效果,此属性在EdtiView将详细说明。
android:password:以小点”.”显示文本
android:phoneNumber:设置为电话号码的输入方式。
android:privateImeOptions:设置输入法选项,此处无用,在EditText将进一步讨论。
android:scrollHorizontally:设置文本超出TextView的宽度的情况下,是否出现横拉条。
android:selectAllOnFocus:如果文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。 TextView中设置后无效果。
android:shadowColor:指定文本阴影的颜色,需要与shadowRadius一起使用。
android:shadowDx:设置阴影横向坐标开始位置。
android:shadowDy:设置阴影纵向坐标开始位置。
android:shadowRadius:设置阴影的半径。设置为0.1就变成字体的颜色了,一般设置为3.0的效果比较好。
android:singleLine:设置单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用“…”来表示。如android:text="test_ singleLine "
android:singleLine="true" android:layout_width="20dp"将只显示“t…”。如果不设置singleLine或者设置为false,文本将自动换行
android:text:设置显示文本.
android:textAppearance: 设置文字外观。如 “?android:attr/textAppearanceLargeInverse”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否 则使用默认的外观。可设置的值如下:textAppearanceButton/textAppearanceInverse /textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse
android:textColor:设置文本颜色
android:textColorHighlight:被选中文字的底色,默认为蓝色
android:textColorHint:设置提示信息文字的颜色,默认为灰色。与hint一起使用。
android:textColorLink:文字链接的颜色.
android:textScaleX:设置文字之间间隔,默认为1.0f。
android:textSize:设置文字大小,推荐度量单位”sp”,如”15sp”
android:textStyle:设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用“|”隔开
android:typeface:设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3]
android:height:设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米)
android:maxHeight:设置文本区域的最大高度
android:minHeight:设置文本区域的最小高度
android:width:设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米),与layout_width 的区别看这里。
android:maxWidth:设置文本区域的最大宽度
android:minWidth:设置文本区域的最小宽度

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值