android基础知识总结.docx

上传人:b****6 文档编号:7354046 上传时间:2023-01-23 格式:DOCX 页数:16 大小:23.71KB
下载 相关 举报
android基础知识总结.docx_第1页
第1页 / 共16页
android基础知识总结.docx_第2页
第2页 / 共16页
android基础知识总结.docx_第3页
第3页 / 共16页
android基础知识总结.docx_第4页
第4页 / 共16页
android基础知识总结.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

android基础知识总结.docx

《android基础知识总结.docx》由会员分享,可在线阅读,更多相关《android基础知识总结.docx(16页珍藏版)》请在冰豆网上搜索。

android基础知识总结.docx

android基础知识总结

android根底知识总结

  Android最根底的知识无非就是四大布局组件,再到后台控制知识。

下面是为大家的android根底知识总结,希望大家喜欢!

  一、布局管理器

  a)线性布局

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

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

  b)表格布局

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

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

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

  c)帧布局

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

  [java]viewplaincopy

  For(inti=0;i<7-currentColor;i++){

  Views[i].setBackgroundResource(colors[i+currentColor]);

  }

  For(inti=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(longbase):

设置计时器的起始时间

  2.setFormat(Stringformat):

设置显示时间的格式

  3.start():

开始计时

  4.stop():

停顿计时

  5.setOnChronometerTickListener(Chronometer.OnChronometerTickListener):

为计时器绑定时间监听,当计时器改变时触发该监听器。

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

  1.System.currentTimeMillis():

该时间是基于世界时间的,它返回的是从January1,197000:

00:

00UTC到现在时间已经逝去了多多少millisecond,当我设置android的系统时间时,会应该影响该值.

  2.uptimeMillis():

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

  3.elapsedRealtime():

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

  b)图像视图(ImageView)

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

  [java]viewplaincopy

  BitmapDrawablebitmapDrawable=(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.两个组件绑定鉴定的方式略有不同:

  [java]viewplaincopy

  1.dataPicker.init(year,month,day,newOnDataChangeListener(){

  publicvoidonDataChange(Datapickerarg0,intyear,intmonth,intday){

  ChooseData.this.year=year;

  ….

  ….

  }

  }

  2.timerPicker.setOnTimerChangedListener(newOnTimerChangedListener(){

  publicvoidonTimerChanged(TimerPickerarg0,inthour,intminute){

  ChooseData.this.hour=hour;

  ….

  }

  }

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

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

  requestWindowFeature(Window.FEATUREPROGRESS);

  显示:

  setProgressBarVisibility(true);

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

  requestWindowFeature(Window.FEATUREINDETERMINATEPROGRESS);

  显示:

  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(Stringtag):

创立选项卡;

  2.addTab(TabHost.TabSpectabSpec):

添加选项卡。

  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:

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

  [java]viewplaincopy

  1.OnCreate(BundlesavedInstanceState){

  Button.setOnclick…{

  …

  }

  Handler…

  }

  2.OnCreateDialog(intid,Bundlestatus){

  Switch(id){

  Case…

  }

  }

  3.onPrepareDialog(intid,Dialogdialog){//该方法将

  //在onCreateDialog方法调用之后被调用

  switch(id){

  case….

  }

  }

  iii.DataPickerDialog:

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

  iv.TimePickerDialog:

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

  i)对话框窗口(PopupWindow)

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

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

  j)Notification

  i.调用getSystemService(NOTIFICATIONSERVICE)方法获取系统的NotificationManager效劳

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

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

  iv.为Notification设置各种属性

  v.通过NotificationManager发送Notification

  k)菜单和子菜单(SubMenu)

  i.onCreateOptionsMenu(Menumenu)

  ii.onOpeionsItemSelected(MenuItemmi)

  三、事件处理

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

  b)基于监听的事件处理

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

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

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

  1.内部类

  a)

  [java]viewplaincopy

  PublicclassAextendsActivity{

  PublicvoidonCreate(BundlesavedInstanceState){

  …

  }

  ClassAListenerimplementsView.OnClickListener{

  PublicvoidonClick(Viewarg0){

  …

  }

  }

  }

  b)优势:

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

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

  2.外部类

  a)

  [java]viewplaincopy

  PublicclassAextendsActivity{

  PublicvoidonCreate(BundlesavedInstanceState){

  …

  }

  }

  PublicclassAListenerimplementsOnLongClickListener{

  PublicBooleanOnLongClick(Viewsource){

  …

  }

  }

  b)缺点:

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

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

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

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

  a)

  [java]viewplaincopy

  PublicclassAListenerextendsActivityimplementsOnClickListener{

  PublicvoidonCreate(){

  …

  }

  PublicvoidonClick(Viewv){

  …

  }

  }

  b)优点:

简洁

  c)缺点:

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

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

  4.匿名内部类

  5.直接绑定到标签

  a)  c)基于回调的事件处理

  i.更加适用于应付那种事件处理逻辑比较固定的View,比方跟随手指的小球。

  ii.基于回调不比基于监听的方面:

  1.基于监听的事件模型分工更加明确,事件源、事件监听由两个类分开实现,因此具有更好的可维护性

  2.Android的事件处理机制保证基于监听的事件监听器会优先被触发。

  iii.为了使用回调机制类处理GUI组件上所发生的事情,我们需要为该组件提供对应的事件处理方法——而java又是一种静态语言,我们无法为某个对象动态的添加方法,因此只能继承GUI组件类,并重写该类的事件处理方法来实现。

以View为例,包含如下方法:

  1.booleanonKeyDown(intkeyCode,KeyEventevent);

  2.booleanonKeyLongPress(intkeyCode,KeyEventevent);

  3.booleanonkeyShortCut(intkeyCode,KeyEventevent):

当一个键盘快捷键事件发生时触发该方法;

  4.booleanonKeyUp(intkeyCode,KeyEventevent);

  5.booleanonTouchEvent(MotionEventevent);

  6.booleanonTrackballEvent(MotionEventevent)

  iv.这些方法都返回一个boolean值,用来判断方法内部的事件是否向外传出,如果为true,那么表示事件到此不传播出去;如果为false,那么表示事件继续向外传播,直到true。

  d)两种事件处理例子:

  i.基于监听:

  [java]viewplaincopy

  publicclassDrawViewextendsView{

  …

  publicDrawView(Contextcontext);

  publicvoidonDraw(Canvascanvas);

  }

  publicclassDemoextendsActivity{

  publicvoidonCreate(BundlesavedInstanceState){

  DrawViewdraw=newDrawView(this);

  draw.setOnTouchListener(newOnTouchListener(){

  publicbooleanonTouch(Viewarg0,MotionEventevent){

  …

  }

  });

  }

  }

  ii.基于回调:

  [java]viewplaincopy

  publicclassDrawViewextendsView{

  …

  publicDrawView(Contextcontext);

  publicvoidonDraw(Canvascanvas);

  publicvoidonTouchEvent(MotionEventevent);

  }

  DrawView直接放到界面布局中即可。

  iii.从上面两种情况来看,在这种事件处理逻辑比较固定的view,采用基于回调的方式会更好的提高程序的内聚性。

  e)响应系统设置的事件(Configuration)

  i.专门用于描述设备上的配置信息,这些配置信息既包括用户特定的配置项,也包括系统的动态设备配置。

  ii.使用方法:

  1.获取系统的Configuration对象。

  Configurationcfg=getResources().getConfiguration();

  2.调用Configuration对象的属性来获取设备状态,详细有状态,查API。

  3.响应系统设置更改方法:

onConfigurationChanged,用法和基于回调方法一样。

  4.因为动态的更改系统设置,因此需要授予应用更改系统设置的权限,并且设置Activity运行动态修改的系统设置,假设修改屏幕方向,那么如下:

  f)Handler消息传递机制

  i.Android平台不允许Activity新启动的线程访问该Activity里的界面组件,因此需要借助Handler来完成,重写Handler的handleMessage方法,当新线程发送消息时,该方法会被自动回调,因为该方法依然位于主线程,所以可以动态的修改Activity的组件。

一个很常见的用法,我们在新启动的线程中不用Toast,而是一般放到Handler中写,原因就是此。

  四、深入理解Activity

  a)用LauncherActivity开发启动Activity的列表(源码example)

  i.extendsLauncherActivity

  ii.定义需要跳转的类Class[]clazzs={…class,…class,…class….};

  iii.配置Adapter,setListAdapter(adapter);

  iv.重写intentForPosition方法

  publicIntentintentForPosition(intposition){

  returnnewIntent(…this,clazzs[position]);

  }

  b)PreferenceActivity的应用

  i.开发Android应用时,需要进展选项设置,这些选项设置会以参数的形式保存,习惯上用Preferences进展保存

  ii.继承PreferenceActivity,使用自定义的布局,新建xml文件夹,新建preferences.xml,其元素用法可以查api。

  iii.在onCreate中调用addPreferencesFromResource(..)方法加载指定的界面布局文件

  addPreferencesFromResource(R.xml.preferences);

  iv.程序运行后,将会在/data/data/org.crazyit.activity/sharedprefs/路径下生产一个xml文件,导出后可以看到保存的设置参数。

  c)启动Activity

  i.两种方式

  1.startActivity(Intentintent);

  2.startActivityForResult(Intentintent,intrequestCode)

  ii.第二种启动方式需要重写onActivityResult方法来接收数据

  publicvoidonActivityResult(intrequestCode,intresultCode,Intentintent){

  Bundledata=intent.getExtras();

  …

  }

  iii.传送数据Bundle

  1.Bundledata=newBundle();

  data.putSerializable(“object”,o);

  Intentit=newIntent(…,…);

  intent.putExtras(data);

  iv.接收数据

  1.Intentit=getIntent();

  Bundledata=it.getExtras();

  Objecto=data.getSerializable(“object”);

  v.关闭Activity

  1.第二种启动方式关闭activity的时候需setResult以返回数据给启动前的Activity

  Intentit=getIntent();

  Bundledata=newBundle();

  data.putString(……);

  …Activity.this.setResult(0,intent);

  …Activity.this.finish();

  d)Ac

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1