1 Android应用和开发环境

眉间皱痕 提交于 2020-03-17 07:56:43

(一) 相关的文件

1、res 目录存在Android项目的各种资源:layout存放布局文件,values存放各种xml资源文件(字符串资源文件:strings.xml,颜色资源文件:colors.xml,尺寸资源文件:dimens.xml。 drawable-ldpi, drawable-mdpi, drawable-hdpi, drawable-xdpi 这4个子目录分别存放低分辨率,中分辨率,高分辨率,超高分辨率四种图片文件)。

2、src 一个普通的,保存java源文件的目录。

3、AndroidMainifest.xml是安卓项目的系统清单文件,用于控制安卓应用的名称、图标、访问权限等整体属性。安卓应用的Acitivity, Service, ContentProvider, BroadcastReceiver 四大组件都需要在该文件中配置。

4、build AS自动生成的各种源文件,包括R.java文件也放在该目录的子目录下面。

5、libs 存储安卓项目所需要的第三方JAR包。

6、src 存储安卓项目开发的各种源文件,包括各种java源文件、各种资源文件、和AndroidMainifest.xml文件。AndroidTest目录下存放安卓测试项目。

7、重点关注src res。

8、clean 清除项目生成的内容,也就是恢复原来的样子。

9、debug 打包一个调试用的安卓应用的APK包,使用debug key进行签名。

10、release 打包一个发布用的安卓应用的APK包。

11、install uninstall 将APK包安装到模拟器上,或者卸载。

12、bin 存放生成的目标文件,比如Java的二进制文件,资源打包文件(.ap后缀)。

13、gen 保存自动生成的,位于安卓项目包下的R.java 文件。

14、R.java 石油AAPT工具根据应用中的资源文件自动生成的,因此可以把R.java理解成安卓应用的资源文件。每类资源都对应于R类中的一个内部类,比如所有界面布局资源对应于layout内部类。每一个具体的资源项都对应于内部类的一个public static final int 类型的field。

 

(二)res 资源文件

① strings.xml中的string类型资源:

<resources>

  <string name="app_name">HelloWorld</string>

</resources>

② 在Java代码中使用资源:

上面的内容对于与R.java中如下的内容:

public static final class string{ // 对应一个资源

  public static final int app_name=0x7f040000; //对应一个资源项

}

借助AAPT自动生成R类的帮助,在java代码中国可以通过R。string.app_name应用到“HelloWorld”字符串常量。

③ 在XML中使用资源

使用如下的格式访问资源: @<资源对应的内部类的类名> / <资源项的名称>

eg: @string/app_name

在XML文件中使用标识符的时候,这些标识符无须使用专门的资源进行定义,直接在XML文档长按照如下的格式分配标识符即可:@+id/<标识符代号>

eg: android:id="@+id/ok" 该代码为该组件分配了一个标识符,接下来在程序中直接引用该组件就可以了。

在java中获取该组件,调用Activity的findViewById();

在xml中获取该组件,可以通过资源引用的方式来引用它:@id/<标识符代号>

 

(三) 清单文件 AndroidManifest.xml

通常包含以下的信息:

1 应用程序的包名,为该应用的唯一标识

2 应用程序所包含的组件,如Activity Service BroadcastReceiver ContentProvider 等

3 应用程序兼容的最低版本

4 应用程序使用系统所需的权限声明

5 其他应用程序访问该程序所需要的权限声明

android:icon="@drawable/ic_launcher",这说明该应用的图标为/res/drawable-l/m/hdpi目录下主文件名为icon的图片

 

声明权限:通过为<manifest.../>元素添加<uses-permission.../>子元素可以为程序本身声明权限。

eg: 添加 <uses-permission android:name="android.permission.CALL_PHONE"/>,声明该应用本身需要打电话的权限。

 

(四)基本组件

1、Activity 是安卓应用中负责和用户交互的组件,但是activity只能通过setContenyView(View)来显示指定的组件。

View组件是所有UI控件、容器控件的基类,View组件就是安卓应用中用户实实在在看到的部分。但是View组件需要放在容器组件或者使用activity来显示。

如果使用某个activity来显示指定的view,调用setContentView():

LinearLayout layout=new LinearLayout(this); // 创建一个线性布局管理器

setContentView(layout); //设置该activity显示layout

也可以接受一个布局管理器资源的ID作为参数:setContentView(R.layout.main);

activity为安卓应用提供了可视化的用户界面,如果安卓应用需要多个用户界面,那么这个安卓应用将会包含多个activity,多个activity构成activity栈,当前活动的activity位于栈顶。

activity包含了一个setTheme(int resid)方法来设置窗口的风格,比如希望窗口不显示ActionBar,以对话框形式显示窗口都可以通过这种方法来实现。

2、Service 拥有自己独立的生命周期。常用于为其他组件提供后台服务或者监控其他组件的运行状态。

3、BroadcastReceiver 代表广播消息接收器,监听事件源是安卓中其他的组件。

使用broadcastReceiver接受广播信息,只需要实现自己的BroadcastReceiver子类,并且重写onReceive(Context context, Intent intent)。当其他的组件通过sendBroadcast(), sendStickyBroadcast()或sendOrderedBroadcast()方法发送广播消息时,如果该broadcastReceiver对该消息有兴趣,onReceiver将会被触发。

注册:java: Context.registReceiver(); AndroidManifest.xml:<receiver.../>

4、contentProvider 跨应用的数据交换标准,用户实现自己的contentProvider时候,需要实现以下的抽象方法:

insert(Uri, ContentValues) 

delete(Uri, ContentValues)

update(Uri, ContentValues, String, String[])

query(Uri, String[], String, String[], String)

ContentProvider提供自己的数据,ContentResolver访问数据。

 

(五)Intent && IntentFilter

安卓内不同组件之间通信的载体。

当需要启动一个activity时候,可以调用Context的startActivity(Intent intent) or startActivityForResult(Intent intent, int requestCode)。

当需要启动一个Service时候,调用Context的startService(Intent intent) or bindService(Intent service, ServiceConnection conn, int flags)。

当需要启动一个BroadcastReceiver时候,调用sendBroadcast(Intent intent) sendStickyBroadcast(Intent intent) or sendOrderedBroadcast(Intent intent, String receiverPermission)方法来发送广播消息。

显示Intent: 明确地制定需要启动或者触发的组件的类名;

隐式Intent: 只是指定需要启动或者触发的组件应该满足什么样的条件。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!