SDK大全2的读书笔记

第三章

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

  通过定义selector资源文件,可以实时改变view不同状态下的图标等.需要在drawable文件夹下面创建xml文件,定义<seletor>下的<item>标签.使用的时候用"@drawable/id"..另外在代码里也可以setOnFocusLintener和setOnPressLintener监听器来改变状态.

 

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来判断目前是几点触摸.

 

   

你可能感兴趣的:(读书笔记)