一.Android项目结构:
src:存放java代码的
gen:系统自动生成,,自己不用去动
assets:用来存放大的文件的地方,,,1MB做分割
bin:系统自动生成
libs:自己使用的类库存放地
res:所有资源文件存放的位置
drawable:存放图片
layout:布局,,手机上面的一个界面
menu:用来存放menu按钮里面显示的内容
values:用来存放各种各样的值
AndroidManifest.xml:清单文件,1.该应用所要显示的界面,2.该应用所需要的权限
二.Activity的创建:
1创建一个Activity类的子类。
2在AndroidManifest中的application标签中,注册Activity
3在activity标签的属性中,添加android:name属性,用来关联我们需要注册的Activity类
4如果我们的Activity需要作为程序入口的Activity存在,那么
就在AndroidManifest中的指定的那个Activity标签中,添加一个intent-filter:
<intent-filter>
<action name="android.intent.action.MAIN"/>
<category name="android.intent.category.LAUNCHER"/>
</intent-filter>
三.Activity生命周期(基本的7个生命周期):
onCreate Activity被创建的时候
onStart 界面被创建的时候,onStart方法执行完毕后,我们就可以在屏幕上看到界面
onResume 可以操作界面时,onResume方法执行完毕后,我们就可以通过屏幕对Activity进行操作了
onPause Activity被部分遮盖时,会执行此方法。
onStop Activity完全被遮盖,或退到后台。
onDestroy Activity被销毁时,调用。
onRestart 从onStop状态回到运行状态,需要执行的第一个生命周期。
四.为Activity添加布局:
1在res/layout创建一个xml格式的布局文件,在创建布局文件的时候,我们还会选定它拥有的布局方式。
2在onCreate方法中,调用setContentView将我们的布局文件,设置给Activity。
3使用findViewById方法通过R文件对布局中控件的索引(R.id.btn_id)来找到指定控件的实例。这个时候我们就可以调用这些实例的方法如TextView调用getText即可获取TextView上面显示的文本信息,EditText调用getText获取一个Editable,再调用toString方法,将其转
换为字符串。
4Android的一种事件处理机制:listener,我们使用的大多是为按钮控件(Button)设置一个点击监听,后来我们还涉及到了一个为ListView设计的特别的监听器(onItemClickListener),将这些监听器以匿名内部类的形式创建出来,并且通过需要设置监听器的控件的setOnClickListener,setOnItemClickListener来设置给我们的控件。这样我们就能及时得获取到用户对界面的操作,并作出相应的处理。
五.布局类型:
1.AbsoluteLayout,绝对布局,使用坐标系规范屏幕,原点在左上角,x向右是正方向,y向下是正方向。
1.1关键属性:
layout_x,layout_y,在AbsoluteLayout中放置控件时,这两个属性是AbsoluteLayout特有的,只能在AbsoluteLayout中的控件才能使用。他们用来确定指定的控件的摆放坐标(控件左上角的坐标)。
1.2优缺点:
优点:使用AbsoluteLayout,能够最自由地去摆放我们界面上的控件。
缺点:由于AbsoluteLayout是使用坐标系的方式来确定子控件的摆放位置,但是由于Android平台屏幕的碎片化,我们不能确定用户的屏幕分辨率,那么我们贸然使用这种布局类型,可能让用户感受不一样,影响用户体验。
2.LinearLayout,线性布局,所有的子控件都排成一列整齐摆放。
2.1关键属性:
LinearLayout属性:
android:orientation="vertical"["horizontal"]
表示LinearLayout中的子控件的摆放方向,vertical垂直摆放(从上到下)。horizontal水平摆放(从左到右)。
android:baselineAligned="true"["false"]
表示LinearLayout中的子控件的摆放要依据基线来对齐。
true是对齐,false不对齐。
android:baselineAlignedChildIndex="childIndex"
表示以哪一个子控件的基线来对齐。
android:gravity="center_horizontal"
表示子控件对齐的方向,可以向左,右,上,下,居中...
子控件属性:
android:layout_weight="1.0"
这个属性只有在LinearLayout中有效,他表示我们的子控件所需要占据的大小,用于与其他的控件分割父控件的空间。
2.2优缺点:
优点:线性布局,受到屏幕分辨率影响最小。子控件排列整齐。
缺点:子控件只能按照指定的几种方式摆放,可能无法适应商业项目中部分花样繁多的功能界面的需求。
3.FrameLayout,帧布局,放置在内部的所有控件都会分层摆放,一个控件一层。后放入的控件会摆放在最上面的层里。如果最上面的一层的控件不够大,我们也能够看到他下面的其他控件。
3.1关键属性:
FrameLayout属性:
android:foreground,可以使用这个属性在整个布局的前面添加一个图片或者颜色。
android:foregroundGravity,调整由android:foreground设置的图片的对齐方向。
3.2优缺点
优点:有多重动画控件都由FrameLayout实现,说明FrameLayout很适合播放动画的功能界面实现。
缺点:约束比较强,控件摆放的方式只有这一种,对内部控件操作的手段也比较少。
4.RelativeLayout,相对布局,通过父控件的边或者以前设置的控件的位置,来确定现在放入的新的控件的位置。
4.1子控件的属性:
android:layout_alignParentTop
android:layout_alignParentBottom
android:layout_alignParentLeft
android:layout_alignParentRight,贴到指定的父控件的边缘。
android:layout_toLeftOf
android:layout_toRightOf
android:layout_toStartOf
android:layout_toEndOf,放置在指定id的控件的指定方向上。
android:layout_above
android:layout_below,放置在指定id的控件的上或下。
android:layout_alignLeft
android:layout_alignRight
android:layout_alignTop
android:layout_alignBottom,与指定id的控件边缘对齐。
android:layout_centerInParent,将我们的控件放置在父控件的中间。
4.2优缺点
优点:内部子控件都是自己相对摆放,在屏幕分辨率出现巨大变化的时候,他们之间的相对位置都不会变。这个布局类型可以很大的减少我们屏幕出现变化时,界面效果的差异性。
缺点:当我们的控件之间的相对关系建立之后,不容易再做修改。
5.Tablelayout,表格布局,不过必须配合TableRow使用,否则就是一个垂直排列的线性布局。
5.1关键属性:
TableLayout:
android:stretchColumns="0"拉伸列,列号从0开始。
android:collapseColumns="0"隐藏列,同上。
android:shrinkColumns="0"收缩列,同上。
TableRow:
android:weightSum="5",此属性与控件的 android:layout_weight="1"一起使用,用来设置一行的所有控件的大小。
(只有新版本可以使用,在4.0版本后可以使用)
6.GridLayout,网格布局,不需要TableRow这么麻烦
6.1关键方法
android:columnCount="3"
android:rowCount="5"
可以通过上面两个方法方便设置我们网格布局的行数和列数。
子控件也可以使用android:layout_column="1"来设置子控件想排在第几个。
六.常用控件:
1.TextView,文本框。
常用属性:
android:text 文本信息
android:textSize 字体大小(单位sp)
android:textColor 字体颜色
android:autoLink 能使文字中的电话号码,网址,邮箱变成类似于超链接的样子。
android:lines 行数
android:maxLength 最大字数
android:gravity ="left" 用于设置View中内容相对于View组件的对齐方式
textView.setVisibility(GONE/VISIBLE) 设置为不可见/可见
textView.setGravity(Gravity.CENTER) 设置文字权重
2.Button,按钮。
常用属性:
button.setTextColor(Color.BLUE);
设置文字颜色
button.setTextSize(123);
设置字体大小
button.setBackgroundColor(Color.BLUE);
设置控件背景色
android:onClick="单击响应方法的名字"
单击响应方法的写法:
public void 方法名(View view){}
android:enabled="false"
android:clickable="false"
设置按钮不可用
3.EditText,可输入文本框,这个控件可以让用户输入文本信息。
常用属性:
android:hint="@string/email_hint"属性:
我们可以加入上面这条属性,用于给我们的编辑框加入一个提示信息。
android:inputType="textEmailAddress"
这条属性,可以提供给我们调整软键盘样式的能力。我们可以得到只有数字或者方便输入邮箱地址的软键盘。
android:imeOptions="actionSend"
软键盘中总是有个确认按钮,这个按钮,并没有默认的响应方法,需要我们自定义。
android:password="true"
以密文形式输入信息。改回false之后,就有可以以明文形式输入。
4.CheckBox,多选框。
我们一样可以使用标签形式将这种控件加入我们的应用。当然关键也是在于如何监听这个控件。
4.1.我们可以使用设置onClick的方式加入一个写在Activity中的点击响应方法。
4.2.我们可以使用多选框的监听器:OnCheckedChangeListener
自定义样式:
在android:button属性上设置Selector
5.RadioButton,单选框。
这个控件不能单独使用,需要与RadioGroup一起使用。
然后给我们的RadioGroup加入一个OnCheckedChangeListener来监听我们的选择监听。不过这里一定要注意这个监听器和多选框的可不是一个,注意他们的包名!
6.ListView,列表控件。实现一个数据列表,能方便地让我们修改数据,并同时影响界面。
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/Cities" >
</ListView>
ListView不只是一个View,还是一个ViewGroup(容器控件)。他是一个用于装载控件的容器。他本身并不用于显示数据,而是用来装载显示数据的控件(TextView,Button, EditText...)的容器。现在看来,其实ListView虽然是控件,但是他的作用更接近于我们的布局类型。不过,布局类型,能够直接在其中放置子控件。而ListView,只能通过适配器 ,加载他的子控件。
常用属性:
android:divider="@color/mycolor" 间隔线的图片或者颜色
android:dividerHeight="3dip" 间隔线的宽度,用于修改ListView中每个item之间的间隔线。
android:stackFromBottom="true"从列表最下方开始。
android:transcriptMode="alwaysScroll"一直显示新来的数据。
android:cacheColorHint="@android:color/transparent" 滑动时,背景透明。
七.适配器:
Adapter是适配器,适配器是用来连接两个不相干的事物的桥梁。在我们今天的课程中,适配器是用来连接我们的AdapterView和数据。
AdapterView中我们常用的有:ListView(列表控件),GridView(网格控件),Gallery(画廊)。
使用适配器的方式显示ListView:
1.在布局文件中,定义一个简单的ListView标签。
2.在Activity中实现一个我们自己扩展的BaseAdapter子类对象。
3.通过findViewById在Activity中找到布局文件中的ListView对象。
4.将适配器对象设置给我们的ListView对象。
ListView动态内容的动态添加:
1.由用户或服务器获取的数据,更新我们的数据容器。
2.然后调用Adapter.notifyDataSetChanged();来提醒ListView数据已经更新,
界面需要刷新。
ListView性能优化:
1.复用convertView
在getView的参数列表中,提供给我们了一个convertView,这个视图对象能为 我们提供一种性能优化的手段:复用刚推出屏幕范围的那个convertView。
2.减少findViewById的使用次数
在convertView中有一个Object类型的tag属性,我们可以再这个属性上存储一个对象。我们利用这个对象存一个我们定义的内部类对象,这个对象保存有我们的convertView的子控件 对象。这样我们复用convertView的时候也就可以复用我们以前取出的子控件对象了。
src:存放java代码的
gen:系统自动生成,,自己不用去动
assets:用来存放大的文件的地方,,,1MB做分割
bin:系统自动生成
libs:自己使用的类库存放地
res:所有资源文件存放的位置
drawable:存放图片
layout:布局,,手机上面的一个界面
menu:用来存放menu按钮里面显示的内容
values:用来存放各种各样的值
AndroidManifest.xml:清单文件,1.该应用所要显示的界面,2.该应用所需要的权限
二.Activity的创建:
1创建一个Activity类的子类。
2在AndroidManifest中的application标签中,注册Activity
3在activity标签的属性中,添加android:name属性,用来关联我们需要注册的Activity类
4如果我们的Activity需要作为程序入口的Activity存在,那么
就在AndroidManifest中的指定的那个Activity标签中,添加一个intent-filter:
<intent-filter>
<action name="android.intent.action.MAIN"/>
<category name="android.intent.category.LAUNCHER"/>
</intent-filter>
三.Activity生命周期(基本的7个生命周期):
onCreate Activity被创建的时候
onStart 界面被创建的时候,onStart方法执行完毕后,我们就可以在屏幕上看到界面
onResume 可以操作界面时,onResume方法执行完毕后,我们就可以通过屏幕对Activity进行操作了
onPause Activity被部分遮盖时,会执行此方法。
onStop Activity完全被遮盖,或退到后台。
onDestroy Activity被销毁时,调用。
onRestart 从onStop状态回到运行状态,需要执行的第一个生命周期。
四.为Activity添加布局:
1在res/layout创建一个xml格式的布局文件,在创建布局文件的时候,我们还会选定它拥有的布局方式。
2在onCreate方法中,调用setContentView将我们的布局文件,设置给Activity。
3使用findViewById方法通过R文件对布局中控件的索引(R.id.btn_id)来找到指定控件的实例。这个时候我们就可以调用这些实例的方法如TextView调用getText即可获取TextView上面显示的文本信息,EditText调用getText获取一个Editable,再调用toString方法,将其转
换为字符串。
4Android的一种事件处理机制:listener,我们使用的大多是为按钮控件(Button)设置一个点击监听,后来我们还涉及到了一个为ListView设计的特别的监听器(onItemClickListener),将这些监听器以匿名内部类的形式创建出来,并且通过需要设置监听器的控件的setOnClickListener,setOnItemClickListener来设置给我们的控件。这样我们就能及时得获取到用户对界面的操作,并作出相应的处理。
五.布局类型:
1.AbsoluteLayout,绝对布局,使用坐标系规范屏幕,原点在左上角,x向右是正方向,y向下是正方向。
1.1关键属性:
layout_x,layout_y,在AbsoluteLayout中放置控件时,这两个属性是AbsoluteLayout特有的,只能在AbsoluteLayout中的控件才能使用。他们用来确定指定的控件的摆放坐标(控件左上角的坐标)。
1.2优缺点:
优点:使用AbsoluteLayout,能够最自由地去摆放我们界面上的控件。
缺点:由于AbsoluteLayout是使用坐标系的方式来确定子控件的摆放位置,但是由于Android平台屏幕的碎片化,我们不能确定用户的屏幕分辨率,那么我们贸然使用这种布局类型,可能让用户感受不一样,影响用户体验。
2.LinearLayout,线性布局,所有的子控件都排成一列整齐摆放。
2.1关键属性:
LinearLayout属性:
android:orientation="vertical"["horizontal"]
表示LinearLayout中的子控件的摆放方向,vertical垂直摆放(从上到下)。horizontal水平摆放(从左到右)。
android:baselineAligned="true"["false"]
表示LinearLayout中的子控件的摆放要依据基线来对齐。
true是对齐,false不对齐。
android:baselineAlignedChildIndex="childIndex"
表示以哪一个子控件的基线来对齐。
android:gravity="center_horizontal"
表示子控件对齐的方向,可以向左,右,上,下,居中...
子控件属性:
android:layout_weight="1.0"
这个属性只有在LinearLayout中有效,他表示我们的子控件所需要占据的大小,用于与其他的控件分割父控件的空间。
2.2优缺点:
优点:线性布局,受到屏幕分辨率影响最小。子控件排列整齐。
缺点:子控件只能按照指定的几种方式摆放,可能无法适应商业项目中部分花样繁多的功能界面的需求。
3.FrameLayout,帧布局,放置在内部的所有控件都会分层摆放,一个控件一层。后放入的控件会摆放在最上面的层里。如果最上面的一层的控件不够大,我们也能够看到他下面的其他控件。
3.1关键属性:
FrameLayout属性:
android:foreground,可以使用这个属性在整个布局的前面添加一个图片或者颜色。
android:foregroundGravity,调整由android:foreground设置的图片的对齐方向。
3.2优缺点
优点:有多重动画控件都由FrameLayout实现,说明FrameLayout很适合播放动画的功能界面实现。
缺点:约束比较强,控件摆放的方式只有这一种,对内部控件操作的手段也比较少。
4.RelativeLayout,相对布局,通过父控件的边或者以前设置的控件的位置,来确定现在放入的新的控件的位置。
4.1子控件的属性:
android:layout_alignParentTop
android:layout_alignParentBottom
android:layout_alignParentLeft
android:layout_alignParentRight,贴到指定的父控件的边缘。
android:layout_toLeftOf
android:layout_toRightOf
android:layout_toStartOf
android:layout_toEndOf,放置在指定id的控件的指定方向上。
android:layout_above
android:layout_below,放置在指定id的控件的上或下。
android:layout_alignLeft
android:layout_alignRight
android:layout_alignTop
android:layout_alignBottom,与指定id的控件边缘对齐。
android:layout_centerInParent,将我们的控件放置在父控件的中间。
4.2优缺点
优点:内部子控件都是自己相对摆放,在屏幕分辨率出现巨大变化的时候,他们之间的相对位置都不会变。这个布局类型可以很大的减少我们屏幕出现变化时,界面效果的差异性。
缺点:当我们的控件之间的相对关系建立之后,不容易再做修改。
5.Tablelayout,表格布局,不过必须配合TableRow使用,否则就是一个垂直排列的线性布局。
5.1关键属性:
TableLayout:
android:stretchColumns="0"拉伸列,列号从0开始。
android:collapseColumns="0"隐藏列,同上。
android:shrinkColumns="0"收缩列,同上。
TableRow:
android:weightSum="5",此属性与控件的 android:layout_weight="1"一起使用,用来设置一行的所有控件的大小。
(只有新版本可以使用,在4.0版本后可以使用)
6.GridLayout,网格布局,不需要TableRow这么麻烦
6.1关键方法
android:columnCount="3"
android:rowCount="5"
可以通过上面两个方法方便设置我们网格布局的行数和列数。
子控件也可以使用android:layout_column="1"来设置子控件想排在第几个。
六.常用控件:
1.TextView,文本框。
常用属性:
android:text 文本信息
android:textSize 字体大小(单位sp)
android:textColor 字体颜色
android:autoLink 能使文字中的电话号码,网址,邮箱变成类似于超链接的样子。
android:lines 行数
android:maxLength 最大字数
android:gravity ="left" 用于设置View中内容相对于View组件的对齐方式
textView.setVisibility(GONE/VISIBLE) 设置为不可见/可见
textView.setGravity(Gravity.CENTER) 设置文字权重
2.Button,按钮。
常用属性:
button.setTextColor(Color.BLUE);
设置文字颜色
button.setTextSize(123);
设置字体大小
button.setBackgroundColor(Color.BLUE);
设置控件背景色
android:onClick="单击响应方法的名字"
单击响应方法的写法:
public void 方法名(View view){}
android:enabled="false"
android:clickable="false"
设置按钮不可用
3.EditText,可输入文本框,这个控件可以让用户输入文本信息。
常用属性:
android:hint="@string/email_hint"属性:
我们可以加入上面这条属性,用于给我们的编辑框加入一个提示信息。
android:inputType="textEmailAddress"
这条属性,可以提供给我们调整软键盘样式的能力。我们可以得到只有数字或者方便输入邮箱地址的软键盘。
android:imeOptions="actionSend"
软键盘中总是有个确认按钮,这个按钮,并没有默认的响应方法,需要我们自定义。
android:password="true"
以密文形式输入信息。改回false之后,就有可以以明文形式输入。
4.CheckBox,多选框。
我们一样可以使用标签形式将这种控件加入我们的应用。当然关键也是在于如何监听这个控件。
4.1.我们可以使用设置onClick的方式加入一个写在Activity中的点击响应方法。
4.2.我们可以使用多选框的监听器:OnCheckedChangeListener
自定义样式:
在android:button属性上设置Selector
5.RadioButton,单选框。
这个控件不能单独使用,需要与RadioGroup一起使用。
然后给我们的RadioGroup加入一个OnCheckedChangeListener来监听我们的选择监听。不过这里一定要注意这个监听器和多选框的可不是一个,注意他们的包名!
6.ListView,列表控件。实现一个数据列表,能方便地让我们修改数据,并同时影响界面。
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/Cities" >
</ListView>
ListView不只是一个View,还是一个ViewGroup(容器控件)。他是一个用于装载控件的容器。他本身并不用于显示数据,而是用来装载显示数据的控件(TextView,Button, EditText...)的容器。现在看来,其实ListView虽然是控件,但是他的作用更接近于我们的布局类型。不过,布局类型,能够直接在其中放置子控件。而ListView,只能通过适配器 ,加载他的子控件。
常用属性:
android:divider="@color/mycolor" 间隔线的图片或者颜色
android:dividerHeight="3dip" 间隔线的宽度,用于修改ListView中每个item之间的间隔线。
android:stackFromBottom="true"从列表最下方开始。
android:transcriptMode="alwaysScroll"一直显示新来的数据。
android:cacheColorHint="@android:color/transparent" 滑动时,背景透明。
七.适配器:
Adapter是适配器,适配器是用来连接两个不相干的事物的桥梁。在我们今天的课程中,适配器是用来连接我们的AdapterView和数据。
AdapterView中我们常用的有:ListView(列表控件),GridView(网格控件),Gallery(画廊)。
使用适配器的方式显示ListView:
1.在布局文件中,定义一个简单的ListView标签。
2.在Activity中实现一个我们自己扩展的BaseAdapter子类对象。
3.通过findViewById在Activity中找到布局文件中的ListView对象。
4.将适配器对象设置给我们的ListView对象。
ListView动态内容的动态添加:
1.由用户或服务器获取的数据,更新我们的数据容器。
2.然后调用Adapter.notifyDataSetChanged();来提醒ListView数据已经更新,
界面需要刷新。
ListView性能优化:
1.复用convertView
在getView的参数列表中,提供给我们了一个convertView,这个视图对象能为 我们提供一种性能优化的手段:复用刚推出屏幕范围的那个convertView。
2.减少findViewById的使用次数
在convertView中有一个Object类型的tag属性,我们可以再这个属性上存储一个对象。我们利用这个对象存一个我们定义的内部类对象,这个对象保存有我们的convertView的子控件 对象。这样我们复用convertView的时候也就可以复用我们以前取出的子控件对象了。