一、相对布局RelativeLayout

       RelativeLayout的下级视图的位置是相对位置,得有具体的参照物才能确定最终位置。

       如果不设定下级视图的参照物,那么下级视图默认显示在RelativeLayout内部的左上角。

      用于确定视图位置的参照物分两种,一种是与该视图自身平级的视图,另一种是该视图的上级视图(也就是RelativeLayout)。

                  与参照物对比,相对位置在布局中的属性值与代码中的类型值

Android中级控件介绍(五)

相对布局的演示效果

Android中级控件介绍(五)

二、框架布局FrameLayout

      FrameLayout也是较常用的布局,其下级视图无法指定所处的位置,只能统统从上级FrameLayout的左上角开始添加,并且        后面添加的子视图会把之前的子视图覆盖掉。

      框架布局一般用于需要重叠显示的场合,比如绘图、游戏界面等,常见属性说明如下。

        foreground:指定框架布局的前景图像。该图像在框架内部永远处于最顶层,不会被框架内的其他视图覆盖。

        foregroundGravity:指定前景图像的对齐方式。该属性的取值说明同gravity。

框架布局的演示效果

Android中级控件介绍(五)

三、复选框CheckBox

       CompoundButton类是抽象的复合按钮,因为是抽象类,所以不能直接使用。实际开发中用的是CompoundButton类的几个派生类,主要有复选框CheckBox、单选按钮RadioButton以及开关按钮Switch。

       CompoundButton在代码中可使用下列4种方法进行设置。

          setChecked:设置按钮的勾选状态。

          setButtonDrawable:设置左侧勾选图标的图形。

          setOnCheckedChangeListener:设置勾选状态变化的监听器。

          isChecked:判断按钮是否勾选。

例:

 复选框

Android中级控件介绍(五)

更换复选框左侧的勾选图像

可将布局文件中的button属性修改为自定义的勾选图形。下面是一个勾选图形状态定义的例子,如果是勾选状态,就显示图形check_choose;如果取消勾选,就显示图形check_unchoose。

    <selector xmlns:android="http://schemas.android.com/apk/res/android">  

    <item android:state_checked="true" android:drawable="@drawable/check_choose"/>

    <item android:drawable="@drawable/check_unchoose"/> </selector>

例:更换勾选图像的示例界面

Android中级控件介绍(五)

四、开关按钮Switch

      Switch是一个高级版本的CheckBox,在选中与取消选中时可展现的界面元素比CheckBox丰富。

      Switch允许设置开启/关闭时候的文本,也允许设置开关轨道的背景和图标。

Switch按钮的默认效果图

Android中级控件介绍(五)

仿iOS的开关按钮

借助状态列表图形StateListDrawable,分别定义已选中时候的“开”图形,以及未选中时候的“关”图形。 状态列表图形的XML文件如下:

<selector xmlns:android="http://schemas.android.com/apk/res/android">  

  <item android:state_checked="true" android:drawable="@drawable/switch_on"/>  

  <item android:drawable="@drawable/switch_off"/> </selector>

 然后把CheckBox控件的background属性设置为该状态图形。

山寨后的开关按钮演示效果

Android中级控件介绍(五)

四、单选按钮RadioButton

       单选按钮要在一组按钮中选择其中一项,并且不能多选,这要求有个容器确定这组按钮的范围,这个容器便是RadioGroup。       

       RadioGroup实质上是个布局,同一组RadioButton都要放在同一个RadioGroup节点下。

      下面是RadioGroup常用的3个方法。

       check:选中指定资源编号的单选按钮。

       getCheckedRadioButtonId:获取选中状态单选按钮的资源编号。

       setOnCheckedChangeListener:设置单选按钮勾选变化的监听器。

 下面是使用单选按钮的代码例子:

Android中级控件介绍(五)

更换RadioButton的图标

        如果通过button属性变更图标,那么图标与文字就会挨得很近,如下面的左图所示。

        为了拉开图标与文字之间的距离,得换成drawableLeft属性展示新图标(不要忘了把button改为@null),此时再设置drawablePadding即可指定间隔距离。

修改效果如下面的右图所示

Android中级控件介绍(五)

自定义按钮图标的三种方式

(1)button属性:主要用于图标大小要求不高,间隔要求也不高的场合。

(2)background属性:主要用于能够以较大空间显示图标的场合。

(3)drawableLeft属性:主要用于对图标与文字之间的间隔有要求的场合。

 

适配视图基础:

       下拉框Spinner 

        数组适配器ArrayAdapter 

        简单适配器SimpleAdapter

五、下拉框Spinner

       Spinner是下拉框,用于从一串列表中选择某项,功能类似于单选按钮的组合。

       Spinner在代码中可调用下列4个方法。

setPrompt:设置标题文字。

setAdapter:设置下拉列表的适配器。适配器可选择ArrayAdapter或SimpleAdapter。

setSelection:设置当前选中哪项。注意该方法要在setAdapter方法后调用。

setOnItemSelectedListener:设置下拉列表的选择监听器,该监听器要实现接口OnItemSelectedListener。

下拉框的两种展现形式

一种是在当前下拉框的正下方展示列表,此时把spinnerMode设置为dropdown,如下面上图所示;

另一种是在页面中部以对话框形式展示列表,此时把spinnerMode设置为dialog,如下面下图所示。

Android中级控件介绍(五)Android中级控件介绍(五)

六、数组适配器ArrayAdapter

        适配器好比一组数据的加工流水线,你丢给它一大把糖果,适配器把糖果排列好顺序,然后拿来制作好的包装盒,把糖果往里面一塞,出来的便是一个个精美的糖果盒。

       最简单的适配流水线就是之前演示Spinner用到的ArrayAdapter。

       ArrayAdapter主要用于每行列表只展示文本的情况,有两道工序。

       (1)第一道工序是构造函数,除了提供一堆原始数据外(六大行星的名称列表),还可以指定当前文本的样式。

       (2)第二道工序是定义下拉列表的文本列表样式。

如何使用使用数组适配器

        使用数组适配器的代码例子如下:    

             // 声明一个下拉列表的数组适配器    

           ArrayAdapter<String> starAdapter = new ArrayAdapter<String>(this, R.layout.item_select, starArray);  

              // 设置数组适配器的布局样式    

           starAdapter.setDropDownViewResource(R.layout.item_dropdown);    

              // 设置下拉框的数组适配器    

            sp.setAdapter(starAdapter);

七、简单适配器SimpleAdapter

          ArrayAdapter只能显示文本列表,而SimpleAdapter允许在列表项中展示多个控件,包括文本与图片。

          下面是SimpleAdapter的使用代码例子:     

           // 声明一个下拉列表的简单适配器,其中指定了图标与文本两组数据    

          SimpleAdapter starAdapter = new SimpleAdapter(this, list,  R.layout.item_simple, new String[]{"icon", "name"},             new int[]{R.id.iv_icon, R.id.tv_name});  

           // 设置下拉框的简单适配器  

           sp.setAdapter(starAdapter);

使用简单适配器的行星列表效果

Android中级控件介绍(五)

八、文本编辑框EditText

       EditText是文本编辑框,用户可在此输入文本等信息。

       EditText的常用属性说明如下。

        inputType:指定输入的文本类型,代码中对应的方法是setInputType。输入类型的取值说明见表,若同时使用多种文本类型,则可使用竖线“|”把多种文本类型拼接起来。

         maxLength:指定文本允许输入的最大长度。该属性无法通过代码设置。

         hint:指定提示文本的内容,代码中对应的方法是setHint。

         textColorHint:指定提示文本的颜色,代码中对应的方法是setHintTextColor。

EditText的输入类型说明

Android中级控件介绍(五)

九、文本监听器TextWatcher

        文本监听器接口TextWatcher用于监控输入文本的变化事件。该接口提供了3个监控方法,具体说明如下。

         beforeTextChanged:在文本改变之前触发。

         onTextChanged:在文本改变过程中触发。

         afterTextChanged:在文本改变之后触发。 文本监听器的常用业务场景包括:

        (1)在输入文本达到指定长度时自动隐藏输入法。

        (2)如果监控到已输入回车符,就自动将焦点移到下一个控件,从而实现回车符自动跳转的要求。

十、自动完成编辑框AutoCompleteTextView

          自动完成编辑框一般用于搜索文本框,如在电商App的搜索框输入商品文字时,下方会自动弹出提示词列表。

         它的实现原理是:EditText结合监听器TextWatcher与下拉列表Spinner,一旦监控到EditText的文本发生变化,就自动弹出             适配好的文字下拉列表,选中具体的下拉项向EditText填入相应文字。

自动完成编辑框的属性和设置方法

Android中级控件介绍(五)

自动完成编辑框的展示效果

Android中级控件介绍(五)

十一、活动Activity基础

       1.Activity的生命周期

     下面是Activity与生命周期有关的方法说明。

       onCreate:创建页面。把页面上的各个元素加载到内存中。

       onStart:开始页面。把页面显示在屏幕上。

       onResume:恢复页面。让页面在屏幕上活动起来,例如开启动画、开始任务等。

       onPause:暂停页面。让页面在屏幕上的动作停下来。

       onStop:停止页面。把页面从屏幕上撤下来。

       onDestroy:销毁页面。把页面从内存中清除掉。

       onRestart:重启页面。重新加载内存中的页面数据。

      2.Activity的生命周期变化(上)

           (1). 页面之间的跳转 首次打开页面ActJumpActivity,调用方法的顺序为:本页面onCreate→onStart→onResume 从       ActJumpActivity跳转到ActNextActivity,调用方法的顺序为:上一个页面onPause→下一个页面                onCreate→onStart→onResume→上一个页面onStop 从ActNextActivity回到ActJumpActivity(按返回键或在代码中调用finish方法),调用的方法顺序为:下一个页面onPause→上一个页面onRestart→onStart→onResume→下一个页面onStop→onDestroy

              (2).竖屏与横屏的切换 首先进入测试页面ActRotateActivity,此时默认为竖屏显示;接着倒转手机切换到横屏,观察日志;然后倒转手机切换回竖屏,观察日志。 无论是竖屏切换到横屏,还是横屏切换到竖屏,都是原屏幕的页面从onPause到onStop再到onDestroy一路销毁,然后新屏幕的页面从onCreate到onStart再到onResume一路创建而来。

               (3).按HOME键与返回App

                    回到桌面时,页面的生命周期从活动状态变为暂停状态。

                    返回App时,页面的生命周期又从暂停状态变为活动状态。

十二、使用Intent传递消息

            1. Intent的中文名是意图,简单地说就是传递消息。Intent是各个组件之间信息沟通的桥梁,既能在Activity之间沟通,又能在Activity与Service之间沟通,也能在Activity与Broadcast之间沟通。

           Intent用于Android各组件之间的通信,它主要有3部分工作:

          (1)Intent需标明本次通信请求从哪里来、到哪里去、要怎么走。

          (2)发起方携带本次通信需要的数据内容,接收方对收到的Intent数据进行解包。

          (3)如果发起方要求判断接收方的处理结果,Intent就要负责让接收方传回应答的数据内容。

Intent组成元素的列表说明

Android中级控件介绍(五)

          2. 表达Intent路径的两种方式

             一种是显式Intent,直接指定来源类与目标类名,属于精确匹配。

             显式Intent的声明方式有如下3种:

                    (1)在构造函数中指定

                    (2)调用setClass方法指定

                    (3)调用setComponent方法指定

              另一种是隐式Intent ,没有明确指定要跳转的类名,只给出一个动作让系统匹配拥有相同字串定义的目标,属于模糊匹配。

               隐式Intent的动作名称通过setAction方法指定,更详细的过滤条件可通过setData方法和addCategory方法设置。

       3.向下一个Activity传递参数

           传递参数的两种方式包括:

            (1)调用putExtra方法。Intent重载了很多种putExtra方法传递各种类型的参数,包括String、int、double等基本数据类型,甚至Parcelable、Serializable等序列化结构。

            (2)调用putExtras方法。Bundle内部用于存放数据的实质结构是Map映射,可添加元素、删除元素,还可判断元素是否存在。开发者把Bundle全部打包好只需调用一次putExtras方法,把Bundle全部取出来也只需调用一次getExtras方法。

       4.向上一个Activity返回参数

          接收返回参数的编码步骤如下:

          (1)前一个页面打包好请求数据,调用方法startActivityForResult(Intent intent, int requestCode),表示需要处理结果数据。

          (2)后一个页面接收请求数据,进行相应处理。

           (3)后一个页面在返回前一个页面时,打包应答数据并调用setResult方法返回信息。

           (4)前一个页面重写方法onActivityResult,并对应答数据进行解包处理。

 

 

 

 

相关文章: