第三章
3.1
TextView的赋值有很多方法,比如在layout里可以直接写字符串 android:text="字符串",或者引用string.xml里的值 android:text="@string/title".而代码中的赋值也可以引用R类,也可以直接写字符串等.
3.2
把颜色代码定义在资源文件中,标签名为:<drawable >,该资源文件应该放在values文件夹下面.引用的时候应该是@drawable/white
3.3
在代码里指定颜色可以使用Color.WHITE等静态常量.
3.4
定义在string.xml里的属性,在代码中可以通过getString(R.String.xx)来访问.其实最正规的写法是 getResources().getString(id).同理,获得颜色,尺寸等都可以通过这种方式
3.5
取得屏幕真实的大小,可以通过getWindowManager().getDefaultDisplay().getHeight()
3.6
style的定义,style就是把view的属性集合抽离出来,放在一个地方,以便重复调用.另外style也适用于Activity的window.该style.xml也需要放在values文件夹里.同样的,使用<style>标签
3.7
button的onClickLinstener的写法.需要注意的是监听器里的onClikc方法的形参View v指的是来自父层的view.这里指的是button本身.
3.8
setContentView每次调用都会重新加载一次布局文件,可以通过这种方法在一个activity实现多个layout的切换(但不提倡,还是一个activity,一个layout比较好.)
3.9
调用另一个activity可以通过intent和startActivity(intent)方法.需要注意的是,如果之前的acitivy不需要用了,可以先finish掉.如果希望第二个acitivy finish的时候返回结果给第一个acitivy,应该调用startActivityForResult(intnent),然后重写第一个acitivty里的onAcitivityResult方法.用ResultCode和ResportCode的来明确到底是从哪个activity返回.返回给谁.
应用程序的入口acitivity需要在Manifest.xml里指定,设定入口的activity需要指定action为android.intent.action.MAIN,category指定为android.intent.category.LAUNCHER
3.10
不同activity的数据传递是通过intent携带的bundle来实现.而intent.put("",""),事实上也是put到intent携带的bundle里.也就是说,new一个新的intent的同时也会new 一个bundle
3.11
startActivityForResult的用法
3.12
AlertDialog用与警告,确认等提示框.注意对话框里按钮的监听器的写法.最后必须show(),不然无法实现.另外需要注意的是,当对话框弹出的时候,activity应该会进入onPause状态.
3.14
通过Typeface来设置字体,通过textView.setTypeface.注意系统提供了一些常用的常数名称.
3.15
Gallery的用法.这里的Adapter是继承自BaseAdapter的自定义Adapter.注意adapter需要重写getView方法,这里需要做很多的优化策略.必须熟练.
3.17
关于页面,这里是菜单按钮的用法.创建通过重写onCreateOptionsMenu方法.menu.add方法,注意,这里定义的itemtId会在onOptionsItemSelected方法里使用.在onOptionsItemSelected做按钮事件的触发
3.18
ProgressDialog的用法,类似于AlertDialog.Progress的样式应该可以修改,待验证.
3.20
具有选择功能的对话框.用new AlertDialog.Builder(context).setItems设置item的布局和监听器
string数组可以用R.array.id来使用,也是定义在string.xml里,使用<array>标签.
3.21
sytle用在activity的window.在代码里可以通过setTheme(R.style.Id),注意必须要在setContentView之前.另外也可以在配置文件里android:theme="".
3.22
在EditText里隐藏密码,布局里可以用android:password="true",而在代码里需要设置setTransformationMethod方法
3.23
多语系就是在文件夹名后面加-en,-jp等.若不加则指的是默认语言.
第四章
4.1
EditText里有onKeyListener监听器,但不是特别好用.有些键盘是无法触发监听的.另外注意,该view必须获得focus才可以触发.
4.2
4.3
Toast可以通过setView使用自定义view,也可以使用setGravity改变显示的位置
4.4
checkBox的setOnClickListener用法,其实这里最好用setOnCheckChangeListener.朱育button的enable属性.
4.6
单选用RadioGroup.在这里设置多个RadioButton.注意监听器是在RadioGroup上
4.7
spinner的用法,需要设定item的layout,以及下拉菜单的item的layout.当弹出下拉菜单的时候让spinner本身做淡出的动画,可以提高界面友好.
4.8
spinner的add和delete.这里的数据不能用数组,最好用list.通过adapter的add或者remove操作.
4.9
Gallery的用法.这里注意的是new的ImageView的时候要设置setScaleType(这有什么用??)
4.13
AutoCompleteTextView,这是一个有下拉提示的EditText,需要设置下拉提示item的layout,以及通过setAdapter添加数据
4.14
analogClock和DigitalClock的原理就是通过new新线程确定时间,然后通过handle更新界面.
4.15
DatePicker和TimePicker的用法DatePicker通过init设置初始值和onDateChangerdListener事件,而TimePicker直接用setOnTimeChangedListener来实现.
而DatePickerDialog和TimePickerDialog就是new 一个新的,需要设置初始化和onTimeSetListener事件
4.16
ImageView有setAlpha设置透明度,注意255为没透明.
4.17
ProgressBar和handler的互交.setIndeterminate的含义??
4.18
GridView就是九宫格,通过setNumColumns设置有多少列.需要setAdapter加载数据,跟listview一个,需要设置item的layout
4.19
当listview的item的layout传入Android.R.layout.simple_list_item_multiple_choice.然后listview setChoiceMode传入CHOICE_MODE_MULTIPLE,就可以做多选设置
4.20
listview通过setAdapter切换数据显示.注意ListActivity的布局中,还可以增加一个新的view,id为android:empty.当listview没数据的时候就会显示这个view
萨芬萨斯反对
dd
4.23
动态缩放imageview.可以用Matrix,通过Bitmap.createBitmap,用原bmp和matrix创建出一个新的bmp,这里用到matrix的postScale
d
4.24
动态选择imageview,通过matrix的postRotate
d RadioButton的用法,注意RadioButton的LayoutParams是在RadioGroup的LayoutParams
4.27
SlidingDrawer的用法
这里重要的是handroid:handler和android:content.前者是要展开的layout配置id,后者是内容的layoutid..这里比较麻烦的是关于android:orientation的设置
4.28
AppWidgetProvider的用法
首先先设置桌面这个layout,然后在xml文件夹下建一个xml作为AppWidget-provider的文件,指定前面的 layout.
在配置文件里设定meta-data
自定义一个AppwidgetProvider类,重写相关方法,注意,这也是一个广播接收器.也可以写onReceiver方法.如果重写必须先super.onReceiver.因为onUpdate等方法是通过onReceiver分发下来的.
layout里的数据赋值通过RemoteViews,并且监听器也是通过这个类,但这里的监听器是通过PendingIntent来做的.
4.29
调用系统的搜索框组件.
需要在配置文件里设置intent-filter,接收搜索框传来的搜索字符.mete-date里设置相应的xml布局
在xml文件夹下创建一个searchable标签的xml,指定一个属性,比如hint的内容等.
在代码里调用onSearchRequested()就会显示搜索框.当搜索结束以后,会根据intent-filter的设置,重新创建新的acactivity,在onCreate里接收数据,通过intent.getStringExtra(SearchManager.QUERY);
4.30
AppWidget里的监听,看4.28
第五章
5.1
具有正则表达式的EditText.在代码中使用Linkify对象,就可以动态的作出判断,点击以后会启动相应的Intent,比如输入的如果是电话号码,点击以后就会自动拨打该号码
在布局文件里使用 android:autoLink
5.2
如何通过intent调用拨打电话的功能
5.3
发短信通过SmsManager的sendTextMessage方法,需要输入收件人地址,发送地址,正文,发送完毕的PendingIntent,送到对方的PendingIntent.
5.5
对数据库的操作.需要通过一个自定义的SQLiteOpenHelper.实现相应的方法.
5.6
手机震动.Vibrator对象(也是一个系统服务),实现vibrate方法(repeat为0表示会一直持续,-1为只会出现一次).通过cancel方法取消震动.需要添加权限android.permission.VIBRATE.
5.8
状态栏的图标和文字提醒.先获得NotiManager对象,然后new一个新的notification,在其中加入PendingIntent,icon,title等.通过notiManager.notify方法启动这个notification.
5.9
AutoCompleteView和CursorAdapter的用法.先自定义CursorAdapter类.实现其中的方法.注意特别是runQueryOnBackgroudThread就是通过关键字获得相应的cursor
5.10
调用联系人目录,选择后返回给原Acitivty.这里要注意的是,每个联系人可以有多组电话号码,电话号码和联系人信息是放在两个表里.
5.11
打开文件,也是通过intent来实现.需要设置Uri(数据内容),type(类型,关联要用什么程序打开).注意需要addFlag(Intent.FLAG_ACTIVITY_NEW_TASK);
5.12
使用clearWallpaper可以还原系统桌面.需要添加权限 android.permission.SET_WALLPAPER
5.13
设置系统桌面用acitivty.setWallpaper(InputStream in)
5.14
获得系统桌面 getWallpaper();
5.15
删除文件用file.delete 重命名用file.renameTo(file)
5.16
取得路径,通过activity.getCacheDir,getFilesDir()
5.17
wifi相关api,通过WifiManager.getWifistate来判断目前状态.打开wifi用setWifiEnabled(true).注意的是,当前如果正在打开,或者正在关闭,不可调用打开关闭的方法,会出异常
5.18
通过telephonyManager取得sim的相关信息.但是要注意的是,电话号码很难获取,因为一般在sim卡号和手机号码的对应是在放电信中心,而不是把号码放在sim卡上
5.19
用android.intent.action.CALL]_BUTTON 启动拨打电话的界面(注意,不是直接拨打)
5.20
按键事件通过重写activity的onKeyDown方法.通过keyCode来判断.
5.21
通过ActivityManager的getRunningTasks方法获得木桩正在允许的task(也就是应用).通过getRunningService获得目前正在允许的服务
5.22
横竖屏的转换.通过getRequestedOrientation可以判断目前的屏幕.通过setRequestedOrientation(注意,必须要设置配置文件里的androidscreenOrientation属性才可以使用上面2个方法.)
5.23
当横竖屏转换的时候会触发onConfigurationChanged方法,但是必须要在配置文件里设置android:configChanges属性才可以触发上面这个方法.
5.24
取得电信网络和手机的相关信息,也是通过telephonyManager.
5.25
yonggestureOverlayView.getGesture获得手写的动作.通过通过GestureLibraries.fromFile加载,最后save到文件里.
第六章
6.1
接收短信 通过接收广播 android.provider.Telephony.SMS_RECEIVED
6.2
手机电池计量,通过获得广播android.intent.action/BATTERY_CHANGED.(需要注意的是,API提到,这个广播必须注册在配置文件里,而不能在代码里)
6.4
开启服务使用onBind或者onStart方法,关闭只用stopService方法就可以了.需要注意的是,在配置文件里可以添加android:exported=true允许外部应用程序调用这个服务
6.6
手机拨打状态,通过TelephonyManager.listen注册PhoneStateListener监听器
6.8
存储卡容量,statFs = new StafFs(path),statFs.getBlockSize(),getBlockCount,相乘就是总容量.getAvailableBlocks()已使用的block数量
6.10
闹钟.alarmManager通过set时间和PandingIntent使用.取消使用manager.cancel(PendingIntent),通过PendingIntent的resquestCode和resportCode来区分不同的闹钟.
6.12
手机翻盖静音通过SensorManager注册水平感光器的监听器.在监听器里判断坐标
6.15
因为service里的context跟activity的context不一定一样.所以,service想跟activity通过,必须借助broadcast.通过在service里sendBroadcast发送广播.
6.16
开机启动,通过接收广播android.intent.action.BOOT_COMPLETED
6.18
监控电池温度.通过温度的sensor.Sensor.TYPE_TEMPERATURE.也同样注册监听器.但是要注意,温度的变化指的是电池温度,而不是人体接触的温度,而且该变化缓慢,不容易测试.
6.19
电池电量的appwidget.每次启动一个电池电量的appwidget后,在onUpdate里就启动一次服务,在服务里获得SharedPreferences的值.同时用一个广播来监听电池变化而set sharedPreferences的值.
6.21
电子罗盘通过方向感光器判断X轴的坐标而判断方向.
第七章
7.1
取得图片资源的几种方法.Bitmap.create(...) BitmapFactory(files.kstreams.byte,resourceId)等
7.2
绘制view需要重写onDraw方法.canvas就是画布,是绘图的地基,paint是画笔.canvas.drawRect(paint)就可以绘制不同形状的内容.path是根据paint的移动来绘图.
同时还可以加上Shader产生渐变效果.比如LinearGradient等等.
7.4
手指移动照片.
7.7
ImageSwitcher可以动态的切换图片,其实也是ImageView封装后加了一层新的包装,同事可以设置InAnimation和outAnimation.需要注意的是,需要显示ViewFactory的makeView方法
7.8
调节音量大小.使用AudioManager.使用audioManager.adjustVolume方法
7.13
VidoeView的用法.事实上这是SurfaceView包装后的view,需要设置MediaController控制器来做暂停,播放,停止等操作.
7.14
用SurfaceView实现VideoView的功能.需要注意的是prepare()和release的用法和使用时机.
7.15
照相机和SurfaceView的结合使用,把照相机的内容通过Holder跟SurfaceView连接起来.
7.18
Text-to-Speech用法.tts的创建需要设置onInitListener监听器,用来初始化播放的语言类型.然后通过speak来发言.最后可以用shutdown方法来释放内存.
7.19
触摸移动照片,用在高分辨率的照片上.当屏幕无法显示完全部的内容的时候使用.事实上每次触摸后都是重新绘制bitmap.根据触摸移动后的位置来判断.
放大和缩小图片通过双击和单击监听器完成.需要重写onSingleTapConfirmed和onDoubleTapListener方法
7.20
多点触摸,事实上android支持最多3个的触摸.都是通过onTouchEvent方法来判断.使用event.getPointerCount来判断目前是几点触摸.