视频下载地址:http://www.verycd.com/topics/2837883/
源码下载地址:http://www.mars-droid.com/bbs/forum.php?mod=viewthread&tid=14&extra=page%3D1
本人练习码:http://files.cnblogs.com/vipcjob/Android第二季练习.rar
快捷键:
ctrl + shift + o ,导入命名空间,import …
alt + / ,智能提示,补足名称
ctrl + shift + f ,格式化代码
DEBUG:
IE打开的帮助文档很慢,最后换了FF就好了
strings.xml出现异常,string节点错写成stirng,还有android、layout_width等拼错了。把layout中的控件id改完之后,R.java的值没有变化,解决办法,把gen删掉,重新运行后gen自动重新生成,如果没有,改一下xml再保存,gen重新生成。
目录结构:
src:代码源文件。
gen:android自动生成的资源ID标识(针对每一个res文件)
res:资源文件。
layout,布局文件。每一个activity都对应有一个layout文件。setContentView(R.layout.main);
values-strings.xml变量定义。
AndroidManifest.xml:应用程序配置文件。用到gen-R中的变量名。
01 Spinner:
Android的下拉框。
1.strings.xml变量:<string-array @name><item>…</item>…</string-array>.
2.main.xml控件:<Spinner @id @width @height @prompt/>
3.activity.java适配器:
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(…);
adapter.setDropDownViewResource(…);
spinner.setAdapter(adapter);
4.点击事件:
public class MyOnItemSelectedListener implements OnItemSelectedListener{…}
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
5.动态绑定:
a.自定义一个item.xml。新建一个LinearLayout,定义一个TextView(tvId)。
b.绑定:
List<String> list=new ArrayList<String>(); //list.add(“item1”);
ArrayAdapter adapter = new ArrayAdapter(this,R.layout.item,R.id.tvId,list);
02_1 DataPickerDialog
1.创建显示文本和点击按钮,定义按钮事件,触发showDialog(…)事件。
2.showDialog会调用重写的onCreateDialog方法,在onCreateDialog中返回一个new DatePickerDialog(this, myDateSetListener, mYear, mMonth,mDay); 这里可以加入设置时间里的监听事件,也可以为null,即什么也不做。
3.定义DatePickerDialog的OnDateSetListener事件,重写onDateSet方法,做一些设置完成后的显示动作。
4.获取当前时间:
Calendar c = Calendar.getInstance(); //得到当前时间对象
再用c.get方法获取,参数通过常变量去取。如c.get(Calendar.YEAR),还有MONTH,DAY_OF_MONTH。
类TimePicker
02_2 AutoCompleteTextView
1.定义自动完成框(下拉部分)的样式,新建list_item.xml,画一个TextView
2.在main.xml中创建AutoCompleteTextView
3.定义数据源
a.static final String[] Countries = new string[] {….}
b.List<String> Countries = new ArrayList<String>();
c.也可以在strings.xml中定义string-array数组。
String[] Countries = getResources().getStringArray(R.array.countries_array);
4.绑定数据:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_item,Countries);
textView.setAdapter(adapter);
03 ExpandableListActivity、SimpleExpandableListAdapter
1.在main.xml中声明ExpandableListActivity控件:
一个显示数据的ExpandableListView和一个ID为android:id="@id/android:empty"的显示控件,如TextView
2.新建group.xml分组样式文件和child.xml子项样式文件
3.创建一个Activity,继承ExpandableListActivity
4.为group和child创建数据
List<Map<String,String>> groupList = new ArrayList<Map<String,String>>(); //分组
List<List<Map<String, String>>> childLists = new ArrayList<List<Map<String, String>>>(); //子项s
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(this,
groupList, R.layout.group, new String[]{"group"},new int[]{R.id.tv_group},
childLists, R.layout.child, new String[]{"country"}, new int[]{R.id.tv_child});
04 SeekBar和RatingBar
SeekBar,可拖动的进度条,如播放器的进度条。
1.在main.xml中创建SeekBar,设置Max为100
2.创建事件监听器SeekBarListener implements SeekBar.OnSeekBarChangeListener {…}
onProgressChanged,进度条发生变化时(有fromUser参数标识是否来至用户的操作)。onStartTrackingTouch,开始拖动时(点下鼠标时)。onStopTracking,结束拖动时(松开鼠标时)。
RatingBar,评分的星星条
1.创建RatingBar,定义属性:numStarts,总星星数;stepSize,每次移动多少个
2.定义事件监听器RatingBarListener implements RatingBar.OnRatingBarChangeListener{…}
05 appwidget
即窗口小部件。启动模拟器,解锁,点击桌面不放,会弹出“添加到主屏幕”,其中的“窗口小部件“即是。
比如在桌面上放置一个时钟。要实现时钟转动变化,需要定义一个广播事件。
1.定义AppWidgetProviderInfo:在res下新建一个xml文件夹,添加文件example_appwidget_info.xml。
这个文件用来描述AppWidget的高度、宽度、刷新间隔、具体的布局样式文件等。
2.定义具体的布局文件example_appwidget.xml(在桌面显示出来的样子)
3.在AndroidManifest.xml中声明receiver。
它的名字是实现AppWidgetProvider的类的类名,intent-filter中的action是系统自带的用于更新所有appwidget的广播动作android.appwidget.action.APPWIDGET_UPDATE。meta-data是描述,name是固定的android.appwidget.provider,android:resource="@xml/example_appwidget_info "指定描述信息的位置。
4.实现类ExampleAppWidgetProvider extends AppWidgetProvider {…}
onUpdate:经到达指定的更新时间之后或者当用户向桌面添加AppWidget时
onDeleted:当AppWidget被删除时
OnEnabled:当一个AppWidget的实例第一次被创建时
OnDisabled:当最后一个AppWidget实例被删除后(如在桌面拉出多个图标后全部删除)
OnReveice:接收广播事件,根据参数决定调用以上四个方法中的哪一个
06 PendingIntent、RemoteViews
例子:实现AppWidget与程序交互。在AppWidget中添加一个按钮,并执行事件,打开一个Activity。
1.在example_appwidget.xml中加入一个Button。
2.为按钮绑定监听器,在ExampleAppWidgetProvider.java中添加onUpdate处理事件。
Intent intent = new Intent(context, AppWidgetActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,intent, 0); //定义动作
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.example_appwidget);
//用RemoteViews可以获得不在同一进程中的appWidget对象
remoteViews.setOnClickPendingIntent(R.id.widgetButtonId,pendingIntent); //绑定事件
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);//更新appWidget,为它附加事件
07 AppWidget续
实现:a.接受来自AppWidget的广播
1.在AppWidgetProvider中自定义一个Action
2..在AndroidManifest.xml中为AppWidgetProvider注册新的intent-filter,action的name为自定义Action值
3.创建Intent对象,设置Action,使用getBroadcast()方法创建一个PendingIntent
4.为AppWidget绑定PendingIntent事件,更新它。
5.在onReceive方法当中接收广播消息,处理事件
实现:b.更新AppWidget当中控件的状态
1.AppWidget发送广播(intent.setAction),程序接收广播,在这个onReceive中改变AppWidget的状态
2.在RemoteViews类对象当中有一系列的方法可以更新控件
3.在使用RemoteViews更新控件状态之后,需要使用AppWidgetManager通知AppWidget进行更新
08 Animations
总体分两类:
1.Tweened Animations,渐变动画。做旋转Rotate,移动Translate,缩放Scale,淡入淡出Alpha;
2.Fame-by_Frame Animations,帧动画。创建一个Drawable序列,可以按指定的时间间歇地逐个显示。
注意是import android.view.View.OnClickListener,不是android.content.DialogInterface.OnClickListener
1.创建一个AnimationSet对象(可以添加多个Animation,设置每一个动画的通用属性值)
a.setDuration 持续时间
b.setFillAfter 参数为true时,动画执行后,控件保持结束的状态
c.setFillBefor 参数为true时,动画执行后,控件将回到执行之前的状态
d.setStartOffSet 执行动画之前的等待时间
e.setRepeatCount 执行次数
2.创建相应的Animation对象,设置相应的动作参数
3.将Animation对像添加到AnimationSet 对象中。
4.使用控件对象开始执行AnimationSet
09 Animations续
利用xml文件实现动画,好处:多个控件可以共同使用一个动画效果
在res下新建文件夹anim,建立四个动画对应的xml文件,按钮事件彩用AnimationUtils.loadAnimation方法
Rotate的android:pivotX值有三种设置方法:
a.android:pivotX=“50” 绝对位置定位
b.android:pivotX=“50%” 相对控件本身定位
c.android:pivotX=“50%p” 相对于控件的父控件定位
10 Animations2续
关于AnimationSet(Animation的子类)、Interpolator(前后变化快慢不同)、Frame-By-Frame Animations
1.AnimationSet添加单个动画的做法可以用Animation绑定动画xml来代替
2.在动画xml中,set节点有个interpolator属性,用来设置动画的效果(加速或减速);shareInterpolator用来控制set中包含的动画效果是否应用此设置(即相当于AnimationSet的构造函数的bool参数,可以用AnimationSet.setInterpolator设置interpolator)如果为false,则需要在每个动画上指定属性andorid:interpolator。
a.AccelerateDecelerateInterpolator,前后慢,中间加速
b.AccelerateInterpolator,开始慢,然后加速
c.CycleInterpolator,动画循环播放特定的次数,速度改变沿着正弦曲线
d.DeceleraInterpolator,开始快,然后减速
e.LinearInterpolator,均匀变化
3. 在drawable-ldpi中加入动画图片文件,创建动画xml文件,用animation-list组合动画,它的属性oneshot为true时表示只播放一次。用setBackgroundResource和AnimationDrawable实现实例。
11 Animations3续
关于LayoutAnimationController、ListView与Animations结合、AnimationListener
实例:ListView选项动态显示
1.创建一个ListActivity,在main中创建一个ListView,id使用@id/android:list,可以用getListView()得到它2.定义一个item.xml做为选项的显示样式,定义数据源BuildListAdapter,实现绑定显示setAdapter。
3.实现动画显示:
a.xml实现:创建list_anim.xml作为动画效果,list_anim_layout.xml作为LayoutAnimationController,它的android:animation指向list_anim,表示执行的动画效果。在要实现动画的ListView控件中加入属性android:layoutAnimation,指向这个controller。
b.代码实现:即换成代码去指定ListView的layoutAnimation属性。同理,利用创建的list_anim.xml创建一个Animation对象,然后新建一个LayoutAnimationController,用Animation对象初始化它,再设置controller的order和delay等属性,最后用ListView对象的setLayoutAnimation方法绑定即可。
实例:用AnimationListener实现删除和添加图片前的淡入淡出效果
1. AnimationListener用于监听动画执行,主要有onAnimationEnd,onAnimationRepeat,onAnimationStart。
2.创建一个RelativeLayout并赋ID值,添加一个ImageView,两个功能按钮。
3.删除的淡出:在删除按钮的监听事件中,先加入一个淡化的动画效果,然后再为ImageView 对象指定一个AnimationListener,在这个AnimationListener的onAnimationEnd事件中删除ImageView对象。添加同理。
12 Json数据解释
需要安装google的json插件,下载地址:http://code.google.com/p/google-gson/downloads/list
把zip下载,解压。项目中新建一个文件夹libs,把json-2.1jar复制进去。右键此jar,build path-add to build path。
a.json解释初探:
1.创建一个json解释类JsonUtils.java,定义方法ParserJson
2.创建一个按钮,并添加事件,解释json对象
b.利用api把json转成一个类对象
1.创建一个User类
2.创建ParserJosnToUser方法,利用Gson类实现
c.把json转成一个类数组
1.创建ParserJsonToListUser,利用TypeToken<LinkedList<User>>实现
2.在历遍的时候,for后面利用自动完成功能alt+/,选择for-iterate over collection。