资源描述
Android项目目录构造
有了前面两章基本,当前咱们再来打开上一章建立HelloAndroid项目,分析其项目目录构造,对Android项目进一步进一步理解。一方面启动Eclipse,展开"Package Explorer"
导航器中"HelloAndroid"项目,如图3-1所示。
与普通Java项目同样,src文献夹是项目所有包及源文献(.java),res文献夹中则包括了项目中所有资源,例如:程序图标(drawable)、布局文献(layout)、常量(values)等。下面来简介其她Java项目中没有gen文献夹中R.java文献和每个Android项目都必要有AndroidManfest.xml文献。
R.java是在建立项目时自动生成,这个文献是只读模式,不能更改,R.java文献是定义该项目所有资源索引文献。先来看看HelloAndroid项目R.java文献,如代码清单3-1所示。
代码清单3-1 R.java
1. package com.yarin.Android.HelloAndroid;
2.
3. public final class R {
4. public static final class attr {
5. }
6. public static final class drawable {
7. public static final int icon=0x7f00;
8. }
9. public static final class layout {
10. public static final int main=0x7f030000;
11. }
12. public static final class string {
13. public static final int app_name=0x7f040001;
14. public static final int hello=0x7f040000;
15. }
16. }
可以看到这里定义了诸多常量,仔细一看就发现这些常量名字都与res文献夹中文献名相似,这再次证明R.java文献中所存储是该项目所有资源索引。有了这个文献,在程序中使用资源将变得更加以便,可以不久地找到要使用资源,由于这个文献不能被手动编辑,因此当咱们在项目中加入了新资源时,只需要刷新一下该项目,R.java文献便自动生成了所有资源索引。
AndroidManfest.xml文献则包括了该项目中所使用Activity、Service、Receiver,咱们先来打开HelloAndroid项目中AndroidManfest.xml文献,如代码清单3-2所示。
代码清单3-2 AndroidManfest.xml
1. <?xml version="1.0" encoding="utf-8"?>
2. <manifest xmlns:android=""
3. package="com.yarin.Android.HelloAndroid"
4. android:versionCode="1"
5. android:versionName="1.0">
6. <application android:icon="@drawable/icon"
android:label="@string/app_name">
7. <activity android:name=".HelloAndroid"
8. android:label="@string/app_name">
9. <intent-filter>
10. <action android:name="android.intent.action.MAIN" />
11. <category android:name="android.intent.category.LAUNCHER" />
12. </intent-filter>
13. </activity>
14. </application>
15. <uses-sdk android:minSdkVersion="5" />
16. </manifest>
代码清单3-2中intent-filters描述了Activity启动位置和时间。每当一种Activity(或者操作系统)要执行一种操作时,它将创立出一种Intent对象,这个Intent对象能承载信息可描述你想做什么,你想解决什么数据,数据类型,以及某些其她信息。而Android则会和每个Application所暴露intent-filter数据进行比较,找到最适当Activity来解决调用者所指定数据和操作。下面咱们来仔细分析AndroidManfest.xml文献,如表3-1所示。
表3-1 AndroidManfest.xml分析
manifest
根节点,描述了package中所有内容
xmlns:android
包括命名空间声明。
xmlns:android=http://schemas.
Android中各种原则属性能在文献中使用,
提供了大某些元素中数据
Package
声明应用程序包
application
包括package中application级别组件声
明根节点。此元素也可包括application
某些全局和默认属性,如标签、icon、
主题、必要权限,等等。一种manifest
能包括零个或一种此元素(不能大余一种)
android:icon
应用程序图标
android:label
应用程序名字
Activity
用来与顾客交互重要工具。Activity是用
户打开一种应用程序初始页面,大某些
被使用到其她页面也由不同activity所
实现,并声明在此外activity标记中。
注意,每一种activity必要有一种<activity>
标记相应,无论它给外部使用或是只用于
自己package中。如果一种activity没有
相应标记,你将不能运营它。此外,
为了支持运营时查找Activity,可包括一种
或各种<intent-filter>元素来描述activity所支持操作
android:name
应用程序默认启动activity
intent-filter
声明了指定一组组件支持Intent值,从
而形成了IntentFilter。除了能在此元素下指
定不同类型值,属性也能放在这里来描
述一种操作所需唯一标签、icon和其她信息
action
组件支持Intent action
category
组件支持Intent Category。这里指定
了应用程序默认启动activity
uses-sdk
该应用程序所使用sdk版本有关
下面咱们看看资源文献中某些常量定义,如String.xml,如代码清单3-3所示。
代码清单3-3 String.xml
1. <?xml version="1.0" encoding="utf-8"?>
2. <resources>
3. <string name="hello">Hello World, HelloAndroid!</string>
4. <string name="app_name">HelloAndroid</string>
5. </resources>
这个文献很简朴,就定义了两个字符串资源,与R.java中相应索引如代码清单3-4所示。
代码清单3-4 R.java中String类
1. public static final class string {
2. public static final int app_name=0x7f040001;
3. public static final int hello=0x7f040000;
4. }
在程序中装载并使用这个字符串资源如代码清单3-5。
代码清单3-5 String资源使用
1. Resources r = this.getContext().getResources();
2. String appname= ((String) r.getString(R.string.app_name));
3. String hello= ((String) r.getString(R.string.hello));
基本上可以定义出项目中所有使用常量,例如颜色。因此,可依照需对资源常量进行定义。下面是定义了颜色常量colors.xml,如代码清单3-6所示。
代码清单3-6 colors.xml
1. <?xml version="1.0" encoding="utf-8"?>
2. <resources>
3. <color name="status_idle">#cccccc</color>
4. <color name="status_done">#637a47</color>
5. <color name="status_sync">#cc9900</color>
6. <color name="status_error">#ac4444</color>
7. </resources>
当前咱们来分析HelloAndroid项目布局文献(layout),一方面咱们打开res->layout->main.xml文献,如代码清单3-7所示。
代码清单3-7 main.xml
1. <?xml version="1.0" encoding="utf-8"?>
2. <LinearLayout xmlns:android=""
3. android:orientation="vertical"
4. android:layout_width="fill_parent"
5. android:layout_height="fill_parent"
6. >
7. <TextView
8. android:layout_width="fill_parent"
9. android:layout_height="wrap_content"
10. android:text="@string/hello"
11. />
12. </LinearLayout>
代码清单3-7中,有如下几种布局和参数。
< LinearLayout>:线性版面配备,在这个标签中,所有元件都是按由上到下排队排成。
android:orientation:表达这个介质版面配备方式是从上到下垂直地排列其内部视图。
android:orientation:表达这里是水平排列
android:layout_width:定义当前视图在屏幕上所占宽度,fill_parent即填充整个屏幕。
android:layout_height:定义当前视图在屏幕上所占高度,fill_parent即填充整个屏幕。
wrap_content:随着文字栏位不同而变化这个视图宽度或高度。
layout_weight 用于给一种线性布局中各种视图重要度赋值。所有视图均有layout_weight 值,默以为零,即需要显示多大视图就占据多大屏幕空间。如果值不不大于零,则将父视图中可用空间分割,分割大小详细取决于每一种视图layout_weight 值和该值在当前屏幕布局整体 layout_weight 值,以及在其她视图屏幕布局layout_weight 值中所占比例。
在这里,布局中设立了一种TextView,用来配备文本标签Widget,其中设立属性android:layout_width为整个屏幕宽度,android:layout_height可以依照文字来变化高度,而android:text则设立了这个TextView要显示文字内容,这里引用了@string中hello字符串,即String.xml文献中hello所代表字符串资源。hello字符串内容"Hello World,HelloAndroid!"这就是咱们在HelloAndroid项目运营时看到字符串。
最后,咱们来分析HelloAndroid项目主程序文献HelloAndroid.java,如代码清单3-8所示。
代码清单3-8 HelloAndroid.java
1. package com.yarin.Android.HelloAndroid;
2.
3. import android.app.Activity;
4. import android.os.Bundle;
5.
6. public class HelloAndroid extends Activity
7. {
8.
9. public void onCreate(Bundle savedInstanceState)
10. {
11. super.onCreate(savedInstanceState);
12. /* 设立Activity要显示布局为(R.layout.main) */
13. setContentView(R.layout.main);
14. }
15. }
主程序HelloAndroid类继承自Activity类,重写了void onCreate(Bundle savedInstanceState)办法。在onCreate办法中通过setContentView(R.layout.main)设立了Activity要显示布局文献(\layout\main.xml)。
android里proguard.cfg文献有什么用?
这是代码混淆用.
你可以搜索一下android 代码混淆,看看人们是怎么配备这个文献.代码混淆是为了防止你apk被反编译而代码所有暴露.但是当前代码混淆只是把命名修改了一下而已,真正反编译时还是可以想办法还原出来,因此不能真正混淆.
到这里,是不是明白了为什么咱们在创立项目时没有进行编码就可以直接运营程序呢?固然,这也是Android开发特点,这样可以很轻松地将代码和UI分开,在国际化和程序维护方面有着巨大作用。如果你Android程序需要自适应国际化,例如说多国语言等问题,那么就可以定义不同语言UI布局,在程序装载时调用不同布局。并且,如果咱们需要修改UI某些问题,就不必查看代码了,直接更改这些布局文献即可,是不是很以便?固然,这需要开发者在开发时使用这种MVC框架,尽量减少使用"硬编码"。这里,笔者个人建议使用这种框架。
展开阅读全文