dsad

# 一.安卓第一天笔记 
##安卓基本介绍
####1.安卓项目未编译前的项目的必须基本结构

    HelloWorld
    |——libs
    |——res
    |    |——drawable-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi
    |    |——layout
    |    |——values
    |
    |——src
    |    |——cn
    |    |————itcast
    |    |——————helloworld
    |    
    |——AndroidManifest.xml

####2.对于R.java文件的理解

    R.java文件可以理解为Android应用的资源字典
    (1)每类资源都对应这R类中的一个内部类
    (2)每个具体资源项都对应于内部类的一个public static final int类型的Field
    注意:不要手动修改R.java文件的任意内容

####3.对于res目录的理解
>Android应用的res目录是一个特殊的文件夹,存放着Android应用的全部资源,是资源仓库。包括图片资源,字符资源,颜色资源,尺寸资源,样式资源等等,不同的资源放到res不同文件夹。Android按照约定对res进行扫描生成R.java文件。

####4.在Java与XML中使用res资源仓库的资源,即资源引用
> Java:AAPT为Android项目自动生成的R.java文件,每个资源项对应于各个资源内部类(不同种类资源生成各自的资源内部类),在Java代码中可通过[R.<资源的内部类名称>.<资源名称>]来获取对应的资源。如R.string.app_name引用到"HelloWorld"字符串常量。

> XML:XML文件中使用资源更为简单,按照以下格式访问即可:[@<资源对应的内部类的类名>/<资源项的名称>],例如:引用常量"HelloWorld"字符串常量,我们可以这样书写:@string/app_name

####5.重点:组件分配标识符
>当在XML文件中想使用自定义的标识符时,这些标识符无须使用专门手段来进行定义,从而才能使XML文件与R.java文件获取到该标识符资源。只需要直接在XML文档中按照如下格式分配标识符即可:
>
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@+id/<标识符的代号>&nbsp;&nbsp;&nbsp;&nbsp;例如,在XML文件中可以使用如下代码为一个组件分配一个特定的标识符:android:id="@+id/ok"
>
>分配完组件标识符后,使用该标识符有两种方法,XML与Java获取,
>>在XML文件上获取该组件,可通过xml资源引用的方式来引用它,格式为:@id/<标识符代号>&nbsp;&nbsp;&nbsp;例如,"@id/ok"

>>在Java的代码中获取该组件,可以通过调用Activity中的findViewById()方法来进行获取组件即可,如Button btn = (Button)this.findViewById(R.id.ok);

####6.AndroidManifest.xml文件的理解
    
    AndroidManifest.xml清单文件是每个Android项目必需的,它属于整个项目应用的的全局描述文件。
>通常包含如下信息:
>>1.应用程序包名,该包名将会作为该应用的唯一标识(非常重要),对外的显示名称可以重复,但包名是不能重复。

>>2.应用程序所包含的应用框架的四大组件详细信息,如Activity,Service,BroadcastReceiver,ContentProvider等。

>>3.应用程序最低兼容版本,编译的目标版本

>>4.应用程序使用系统所需的权限声明,如打电话,发短信等都是需要获得用户给予的权限才能使用。
    
>>5.其他程序访问该程序所需要的权限声明。    

####7.应用程序权限的说明
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个Android应用可能需要权限才能调用Android系统的功能,同样一个Android程序也可能被别人所调用,因此它同样需要声明调用自身所需要的权限。
>>1.声明运行应用本身所需要的权限
>>>通过在AndroidManifest.xml的<manifest.../>元素添加<uses-permission../>子元素即可为程序本身添加权限声明
>>>>例如:添加打电话声明:<uses-permission android:name="android.permission.CALL_PHONE" />

>>2.声明调用该应用所需要的权限
>>>需要通过为应用的各个组件元素,如<activity../>添加<uses-permission../>子元素即可声明其他程序调用改程序所需要的权限。
>>>>例如:在<activity../>的组件元素中添加发送短信的权限:<uses-permission android:name="android.permission.SEND_SMS" />

####8.查询程序权限的方法
    
    通过SDK的docs下index.html网页,点击进入API,点击android包,查看Manifest.permission类即可,里面有全部有关用户权限的所有内容。

##安卓四大组件基本理解
    
####1.Activity和View
>Activity是Android应用中负责与用户交互的组件,与Jframe本身可以设置布局管理器不同,Activity只能通过setContentView(view)来显示指定的组件。

>View组件是所有UI控件,容器控件的基类,View组件就是Android应用中用户实实在在看到的部分。但View组件需要放到容器组件中,或者使用Activity将它显示出来。
>>指定View通过Activity显示出来,可以通过setContentView方法来显示。
>>>setContentView(View view)可接受任意一个View对象作为参数,如:
>>>

>>>//创建一个线性布局管理器
>>>LinearLayout layout = new LinearLayout();
>>>//设置该Activity显示layout
>>>setContentView(layout);

>>>若在资源中存在相应的布局,直接调用setContentView(R.layout.main),即调用名字为main的布局。

    注意点:
    1.Activity的父类是Context
    2.Layout的父类是ViewGroup,ViewGroup的基类是View
    3.事实上,Activity是Window的容器,Activity包含一个返回该Activity窗口的方法getWindow(),若应用程序不调用setContentView()方法设置窗口显示内容,该程序为一个空窗体。
    4.Activity包含一个setTheme(int resid)方法设置其窗体的风格。(包括不显示ActionBar,以对话框形式显示窗口等)

####Service
    
>&nbsp;&nbsp;&nbsp;&nbsp;Service与Activity的地位相等,表明它是Android的一个独立组件,但它通常是位于后台,无须与用户进行交互,所以Service组件无图形用户界面。使用Service需要继承Service基类,一个Service组件被运行起来后,拥有自己独立的生命周期。
>>Service组件的作用:为其他组件提供后台服务或监控其他组件的运行状态。

####BroadCastReceiver
>BroadCastReceiver,广播消息接收器,是重要的组件。非常类似事件编程中的监听器,但不同的是,普通事件监听器的事件源是程序中的对象;而BroadCastReceiver监听的事件源是Android应用中的其他组件。

>使用BroadCastReceiver组件需要实现自己的BroadCastReceiver子类,并重写onReceive(Context context,Intent intent)方法。当其他组件通过sendBroadCast(),sendSickyBroadcast()或sendOrderBroadcast()方法发送广播,通过设置IntentFilter,即可对其中一个或多个方法进行监听,触发onReceive(Context context,Intent intent)方法。

>开发者实现自己的BroadCastReceiver后,可以通过以下方式进行注册
>>1.在Java代码中通过Context.registReceiver()方法注册BroadCastReceiver。

>>2.在AndroidMainfest.xml文件中通过<recevier../>元素完成相应的注册。


####ContextProvider
>ContextProvider,是Android系统为跨应用的数据交换提供一种通用标准。

>使用方法:只需要继承抽象类ContextProvider后实现抽象方法即可。

>通常与ContextProvider结合使用的是ContextResolver,一个app使用ContextProvider暴露自己的数据,另一个app使用ContextResolver来访问数据。

##Intent与IntentFilter
>&nbsp;&nbsp;&nbsp;&nbsp;Intent并不是Android的应用组件,它是Android应用内不同组件之间通讯的载体。当Android运行时需要连接不同的组件是,通常需要借助Intent来实现。

>&nbsp;&nbsp;&nbsp;&nbsp;Intent可以启动应用中另一个Activity,也可以启动一个service组件,还可以发送一条广播消息触发系统BroadCastReceiver。BroadCastReceiver,Service,Activity三个组件都是通过Intent作为载体来进行通信。注意,不同组件的Intent的使用机制不同。

>>Intent启动Activity,调用Context(Activity为Context的子类)的startActivity(Intent intent)或startActivityForResult(Intent intent,int requestCode)方法,其中,intent包含需要启动Activity的信息。

>>Intent启动Service,调用Context的startService(Intent intent)或startActivityForResult(Intent intent,...)方法,同样intent包含需要启动Service的信息。

>>触发一个BroadCastReceiver时,调用Context的sendBroadCast(Intent intent)或sendSickyBroadcast(Intent intent),sendOrderBroadcast(Intent intent)来发送广播,内部intent包含相应触发信息在里面。

>当一个组件通过Intent启动或触发另一个组件的的"意图"后,该意图会分为两个部分。
>>1.显示Intent,需要明确指定需要启动或者触发的组件类名,系统无须做任何的解析,直接找到组件启动或触发它。

>>2.隐式Intent,隐式Intent只是指定需要启动或触发的组件需要什么条件,系统需要对intent进行解析,当系统找到该组件时,才能启动或触发它。

你可能感兴趣的:(dsad)