Android学习笔记:Android基础知识总结

 

一、布局管理器

a)         线性布局

                        i.              有点像AWT编程中的FlowLayout,不同的是,Android的线性布局不会换行,当组件一个挨着一个的排列到头之后,剩下的组件将不会被显示出来;而FlowLayout中的组件会换行;

                      ii.              线性布局没有layout_gravity属性,设置无效。

 

b)        表格布局

                        i.              设置某列被设为Shrinkable,那么该列的所有单元格的宽度可以被收缩。

                      ii.              设置某列被设为Stretchable,那么该列的所有单元格的宽度可以被拉伸。

                    iii.              设置某列被设为Collapsed,那么该列的所有单元格会被隐藏。

 

c)         帧布局

                        i.              帧布局最有代表性的霓虹灯效果的原理:

For(int i=0;i<7-currentColor;i++){ Views[i].setBackgroundResource(colors[i+currentColor]); } For(int i=7-currentColor,j=0; i<7; i++,j++){ Views[i].setBackgroundResource(colors[j]); }


 

                      ii.               

 

       Px(像素):每个px对应屏幕上的一个点。

Dip或dp:一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dip=1px。但随着屏幕密度的改变,dip与px的换算会发生改变。

Sp:主要处理字体的大小,可以根据用户的字体大小首选项进行缩放。

In:标准长度单位。

Mm:标准长度单位。

Pt:标准长度单位,1/72in

 

 

 

 

 

 

二、View子类

a)         时钟(AnalogClock、DigitalClock、Chronometer)

                        i.              第一第二个为模拟时钟和数字时钟,第三个为计时器。

                      ii.              Chronometer的用法:

                             1.         setBase(long base):设置计时器的起始时间

                             2.         setFormat(String format):设置显示时间的格式

                             3.         start():开始计时

                             4.         stop():停止计时

                             5.         setOnChronometerTickListener(Chronometer.OnChronometerTickListener):为计时器绑定时间监听,当计时器改变时触发该监听器。

                    iii.              获取系统时间的种类和区别(SystemClock):

                             1.         System.currentTimeMillis(): 该时间是基于世界时间的,它返回的是从January 1, 1970 00:00:00 UTC到现在时间已经逝去了多多少millisecond,当我设置Android手机的系统时间时,会应该影响该值.

                             2.        uptimeMillis(): 它表示的是手机从启动到现在的运行时间,且不包括系统sleep(CPU关闭)的时间,很多系统的内部时间都是基于此,比如Thread.sleep(millls), Object.wait(millis), and System.nanoTime()

                             3.         elapsedRealtime(): 它表示的是手机从启动到现在的运行时间,且包括系统sleep(CPU关闭)的时间。

 

b)        图像视图(ImageView)

                        i.              使用之前最好先如下操作:

BitmapDrawable bitmapDrawable = (BitmapDrawable)image.getDrawable(); If(!bitmapDrawable.getBitmap().isRecycled()) { bitmapDrawable.getBitmap().recycle(); }

然后再设置image的值。

                      ii.              通过image可以得到Drawable对象,然后可以得到Bitmap对象,我们的主要操作都是针对Bitmap进行的,image只是在手机上显示的区域,而Bitmap则是你真实的图片,大小与显示的区域有不同。比如我们点击图片上某一个点,这个点的坐标是相对于image的坐标,但是如果我们需要对真实的图片进行操作的话,则需要将这个点的坐标进行相应的缩放倍数的增减。

 

c)         日期、时间选择器(DataPicker和TimerPicker)

                        i.              两个组件通过OnDataChangedListener、OnTimerChangedListener进行监听。

                      ii.              两个组件绑定鉴定的方式略有不同:

1. dataPicker.init(year,month,day,new OnDataChangeListener(){ public void onDataChange(Datapicker arg0,int year,int month,int day){ ChooseData.this.year = year; …. …. } } 2. timerPicker.setOnTimerChangedListener(new OnTimerChangedListener(){ public void onTimerChanged(TimerPicker arg0,int hour,int minute){ ChooseData.this.hour = hour; …. } }

             

d)        进度条——显示在标题上的进度条

                        i.              启用显示进度的进度条:

requestWindowFeature(Window.FEATURE_PROGRESS);

显示:

setProgressBarVisibility(true);

                      ii.              启用不显示进度的进度条:

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

显示:

setProgressBarIndeterminateVisibility(true);

 

e)         拖动条(SeekBar)

                        i.              通过改变android:thumb属性来改变拖动条中滑块的样式,指定一个Drawable对象。

                      ii.              绑定一个OnSeekBarChangeListener监听器,实现onProgressChanged方法。

 

f)         选项卡(TabHost)

                        i.              定义TabHost组件,Activity继承TabActivity

                      ii.              调用TabActivity的getTabHost()方法获取TabHost对象。

                    iii.              通过TabHost对象的方法创建和添加选项卡:

                           1.         newTabSpec(String tag):创建选项卡;

                           2.         addTab(TabHost.TabSpec tabSpec):添加选项卡。

 

g)        可展开的列表组件(ExpandableListView)

                        i.              android:childIndicator    显示在子列表项旁边的Drawable对象

                      ii.              android:groupIndicator  显示在组列表项旁边的Drawable对象

 

h)        对话框

                        i.              AlertDialog:功能最丰富、实际应用最广的对话框。

                             1.         带消息、带N个按钮的提示对话框

                             2.         带列表、带N个按钮的列表对话框

                             3.         带多个单选列表项,带N个按钮的对话框

                             4.         带多个多选列表项,带N个按钮的对话框

                             5.         对话框风格窗口,只需在AnidroidManifest.xml中定义android:theme=”@android:style/Theme.Dialog”

                             6.         自定义界面对话框

                                    a)         创建AlertDialog.Builder对象,该对象是AlertDialog的创建器

                                    b)        调用AlertDialog.Builder的方法为对话框设置图标、标题、内容等。

                                    c)         调用AlertDialog.Builder的create()方法创建AlertDialog对话框

                                    d)        调用AlertDialog的show()方法显示对话框。

                      ii.              ProgressDialog:进度对话框,这个对话框只是对简单进度条的封装。

1. OnCreate(Bundle savedInstanceState){ Button.setOnclick…{ … } Handler… } 2. OnCreateDialog(int id, Bundle status){ Switch(id){ Case … } } 3. onPrepareDialog(int id, Dialog dialog){ //该方法将 //在onCreateDialog方法调用之后被调用 switch(id){ case …. } }

 

                    iii.              DataPickerDialog:日期选择对话框,这个对话框只是对DataPicker的包装。

                     iv.              TimePickerDialog:时间选择对话框,这个对话框只是对TimePicker的包装。

 

i)          对话框窗口(PopupWindow)

                        i.              调用PopupWindow的构造器创建PopupWindow对象。

                      ii.              调用PopupWindow的showAsDropDown(View v)将PopupWindow作为v组件的下拉组件显示出来;或调用PopupWindow的showAtLocation方法将PopupWindow在指定位置显示出来。

 

j)          Notification

                        i.              调用getSystemService(NOTIFICATION_SERVICE)方法获取系统的NotificationManager服务

                      ii.              通过构造器创建一个Notification对象

                    iii.              定义一个PendingIntent,传一个Intent到Notification,用于控制转向

                     iv.              为Notification设置各种属性

                       v.              通过NotificationManager发送Notification

 

k)        菜单和子菜单(SubMenu)

                        i.              onCreateOptionsMenu(Menu menu)

                      ii.              onOpeionsItemSelected(MenuItem mi)

 

 

三、事件处理

a)         基于监听的事件处理和基于回调的事件处理,基于回调的事件处理可用于处理一些具有通用性的时间,基于回调的事件代码会显得比较简洁,但对于某些特定的事件,无法使用基于回调的事件处理,只能采用基于监听的事件处理。

b)        基于监听的事件处理

                        i.              事件响应的动作实际上就是一系列程序语句,通常以方法的形式组织起来,但java是面向对象的编程语言,方法不能独立存在,所以必须以类的形式来组织这些方法,所以时间监听器的核心就是它所包含的方法——这些方法也被称为时间处理器(Event Handler)。

                      ii.              Android的时间处理机制是一种委派式(Delegation)时间处理方式。

                    iii.              实现时间监听器的几种形式:

                              1.         内部类

                                     a)        

Public class A extends Activity{ Public void onCreate(Bundle savedInstanceState){ … } Class AListener implements View.OnClickListener{ Public void onClick(View arg0){ … } } }

 

                                             b)        优势:

                                                                  i.              可以在当前类中复用该监听器;

                                                                ii.              因为监听器是外部类的内部类,可以自由访问外部类的所有界面组件。

                               2.         外部类

                                            a)       

Public class A extends Activity{ Public void onCreate(Bundle savedInstanceState){ … } } Public class AListener implements OnLongClickListener{ Public Boolean OnLongClick(View source){ … } }

 

                                            b)        缺点:

                                                                  i.              事件监听器通常属于特定的GUI界面,定义成外部类不利于提高程序的内聚性;

                                                                ii.              外部类形式的事件监听器不能自由访问创建GUI界面的类中的组件,编程不够简洁。

                                                              iii.              如果某个事件监听器确实需要被多个GUI界面所共享,而且主要是完成某种业务逻辑的实现,则可以考虑使用外部类的形式来定义时间监听器。

                                   3.         Activity本身作为事件监听器类

                                            a)       

Public class AListener extends Activity implements OnClickListener{ Public void onCreate(){ … } Public void onClick(View v){ … } }

 

                                              b)        优点:简洁

                                              c)         缺点:

                                                                  i.              这种形式可能造成程序结构混乱,Activity的主要职责应该是完成界面初始化工作,但此时还需要包含时间处理器方法,从而引起混乱;

                                                                ii.              如果Activity界面类需要实现监听器接口,让人感觉比较怪异

                                     4.         匿名内部类

                                     5.         直接绑定到标签

                                            a)        

转载于:https://www.cnblogs.com/duancanmeng/archive/2012/03/09/2524628.html

你可能感兴趣的:(Android学习笔记:Android基础知识总结)