标签归档:Android

Android学习路线

很多朋友都对学习路线问题感到迷茫,特别是还在上学的朋友们。在这里就详细的为大家介绍一下。

 

1.Java基础

很多朋友一上手就开始学习Android,似乎太着急了一些。Android应用程序开发是以Java语言为基础的,所以没有扎实的Java基础知识,只是机械的照抄别人的代码,是没有任何意义的。那么Java学到什么程度才算是过关呢?我个人认为至少要掌握以下两个方面的内容:
a) Java基础语法:

具体的知识点列表可以在这里下载:《Java知识点列表》V1.0。这部分内容没有讨价还价的余地,必须烂熟于胸。至于具体的学习方法,可以看书或者是看视频,但是关键是要多加练习,无论是书上的练习还是视频里面的练习,都需要仔仔细细的完成;

b)设计模式:由于在Android系统的框架层当中,使用了大量的设计模式,如果没有这个方面的知识,对于Android的理解就会大打折扣。设计模式的种类非常之多,一个一个的全部掌握,是不现实的,必须首先掌握面向对象的基础设计原则,有了这些基础原则的支持,就可以举一反三。这部分内容可以在《Effective Java》和《Agile.Software.Development:Principles,Patterns.and.Practices》这两本书中找到。

 

2.Linux基础知识:

大家都知道,Android系统的基础是Linux操作系统。在开发过程当中,我们也需要使用到一些Linux命令。所以说一些Linux的基础知识是必须的(话说现在的程序员,不懂Linux都不好意思跟人家打招呼),推荐大家看看《鸟哥的私房菜》这本书,写的相当不错;

3.数据库基础知识

这个比较简单,就是一个增删改查的数据库操作,可以看一下这本书:《SQL编程练习与解答》

4.网络协议

至少需要学习两种基础的协议,HTTP协议与Socket协议;

5.Android基础知识

有了以上的铺垫,再来看Android,是不是觉得轻松了很多呢?至于基础知识的学习顺序,最好的方法就是按照Android SDK帮助文档当中的Dev Guide里面的顺序,我的《Android视频教程》也基本上是按照这个顺序录制的;

6.服务器端开发知识:

由于很多Android应用程序都需要服务器端的支持,所以掌握一些服务器端开发知识还是非常有必要的。至于选择哪一种服务器端知识进行学习,就比较麻烦了,因为技术的种类实在是太多了:
a)Java EE:

就是上面邮件当中所提到的SSH—Struts+Spring+Hibernate。这种技术的优点的功能完整、强大,已经使用了很多年,而且既然大家已经非常熟悉Java了,那么学习SSH看起来也顺理成章。但是使用这种技术开发服务器端程序,非常麻烦。即使是一些简单的功能,也可能需要大量的代码和配置文件来实现;
b)PHP:

简单易学,开发快速。但是我们需要多学一种语言,是否得不偿失,就要大家自己判断了;
c).NET:

这项技术的特点和Java EE差不多,但是要想掌握.NET,则需要掌握c#,也是个麻烦的事情;
d)ruby on rails:

这是我个人最喜欢的服务器端技术,简洁,优雅,寥寥几行代码,就可以实现很复杂的功能,但是这需要Ruby语言知识作为基础;

至于选择哪一种技术,就看大家自己的判断了。

 

要成为一个专业的Android开发者,以上的这些知识都必不可少。看起来好像很多,多的可怕。所以还是那句话–“耐心,耐心很重要”。

http://www.marsdroid.org/bbs/forum.php?mod=viewthread&tid=163

 

搭建android开发环境安装ADT时出现requires ‘org.eclipse.gef 0.0.0’ but it could not be found

环境:linux RHEL6.0_x86_64     Eclipse3.5.2  JDK1.6

 

安装ADT的时候,提示“Cannot complete the install because one or more required items could not be found.Software being installed: Android Development Tools 0.9.6.v201002051504-24846 (com.android.ide.eclipse.adt.feature.group 0.9.6.v201002051504-24846)Missing requirement: Android Development Tools 0.9.6.v201002051504-24846(com.android.ide.eclipse.adt.feature.group 0.9.6.v201002051504-24846) requires ‘org.eclipse.gef 0.0.0’ but it could not be found”,解决方法如下:

1.启动eclipse,点击window——>preferences——>install/update——>available software sites,点击Add,把如下几个网址添加过去

Eclipse GEF     http://download.eclipse.org/tools/gef/updates/releases/
Eclipse EMF      http://download.eclipse.org/modeling/emf/updates/releases/
Eclipse GMF      http://download.eclipse.org/modeling/gmf/updates/releases
Eclipse Webtools  http://download.eclipse.org/webtools/updates/
Google eclipse Plugin  http://dl.google.com/eclipse/plugin/3.5

2.重新安装ADT插件,更新网址:https://dl-ssl.google.com/android/eclipse/(如果遇到问题可以把https改为http)

总结:添加这几个网址的作用就是在安装ADT插件时,要eclipse自己寻找所需要的插件,并不需要网上说的那样,把GEF的整个插件下下来,当然,安装整个GEF也是可以的。

PS: Android SDK download 推荐网站: www.android123.com

或 http://dl.google.com/android/android-sdk_r08-linux_86.tgz(直接用下载工具)

http://blog.sina.com.cn/s/blog_4d83777b0100pgfa.html

 

Intent入门指南

本讲内容: Intent

点此下载:Android学习指南第八讲源代码

一、什么是Intent:

在一个Android应用中,Intent是对执行某个操作的一个抽象描述,Intent 负责提供组件之间相互调用的相关信息传递,实现调用者和被调用者之间的解耦。

二、Intent的属性:

Intent是对执行某个操作的一个抽象描述,其描述的内容包括,对执行动作Action的描述、对操作数据的描述、还有4种附加属性的描述。分别介绍如下:

Action
,对执行动作的描述,是个字符串,是对所将执行的动作的描述,在Intent类中定义了一些字符串常量作为标准动作,譬如:

1 public static final String ACTION_DIAL = "android.intent.action.DIAL"
2 public static final String ACTION_SENDTO = "android.intent.action.SENDTO";

我们还可以自定义Action,并定义相应的Activity来处理我们自定义的行为。

data ,是对执行动作所要操作的数据的描述,Android中采用URI来表示数据,譬如在联系人应用中,指向联系人1的URI可能为:content://contacts/1 (由content provider提供的数据类型是content) 。 结合Action和data可以基本表达出意图,

  • VIEW_ACTION content://contacts/1 — 显示标识符为”1″的联系人的详细信息
  • EDIT_ACTION content://contacts/1 — 编辑标识符为”1″的联系人的详细信息
  • VIEW_ACTION content://contacts/ — 显示所有联系人的列表
  • PICK_ACTION content://contacts/ — 显示所有联系人的列表,并且允许用户在列表中选择一个联系人,然后把这个联系人返回给父activity。例如:电子邮件客户端可以使用这个 Intent,要求用户在联系人列表中选择一个联系人。

除了Action和data之外,还有4个属性。

catagory 类别,是被请求组件的额外描述信息,Intent类中也定义了一组字符串常量表示Intent不同的类别。完整的列表可以看API文档中Intent类的相应部分。

1 public static final String CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER";
2 public static final String CATEGORY_PREFERENCE ="android.intent.category.PREFERENCE";

extra 附加信息,除了data之外,还可以通过extra附加信息,extra属性使用Bundle类型进行数据传递,我们可以把Bundle当做HashMap来理解,附加数据可以通过 intent.putExtras() 和 intent.getExtras() 进行传入和读取。 就像这样,获取附加信息: Bundle bundle = intent.getExtras();

添加附加信息: Bundle bundle = new Bundle(); intent.putExtras(bundle);

component 组件,显式指定Intent的目标组件的名称。如果指定了component属性,系统会直接使用它指定的组件,而非匹配查找。

type 数据类型,显式指定Intent的数据类型,一般Intent的数据类型都能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型和不再进行推导。

三、解析Intent

Intent是一种在不同组件之间传递的请求信息,是应用程序发出的请求和意图,作为一个完整的消息传递机制,Intent不仅需要发送端,还需要接收端。

当指定了component属性后,就是显式的指定了目标组件,也就是接收端。如果没有明确指定目标组件,那么Android系统会使用 Intent 里的(action,data,category)三个属性来寻找和匹配接收端。

四、IntentFilter

应用程序组件可以使用IntentFilter来向系统说明自己可以响应和处理那些Intent请求。组件一般通过AndroidManifest.xml文件的<Intent-Filter>描述。

<activity android:name=”.MainTinyPhone” android:label=”@string/app_name”>

<intent-filter>

<action android:name=”android.intent.action.MAIN” />

<category android:name=”android.intent.category.LAUNCHER” />

</intent-filter>

</activity>

五、简单的拨打电话的例子

这是一个简单的拨打电话的程序,它可以截获手机上的拨号按键发出的请求,自己输入号码,并把数据传给系统的打电话程序,从而实现打电话功能。

先上效果图:

按绿色的拨号按钮的时候会呼出一个菜单让你选择使用哪个拨号程序,

image

我们选择简单拨号程序,出现输入框可以填写电话号码,并拨号image

点击拨号后,调用了系统的拨号程序。

image

最终实现了拨号:

image

再上代码,MainTinyDial.java的代码:

01 package andorid.basic.lesson8;
02
03 import android.app.Activity;
04 import android.content.Intent;
05 import android.net.Uri;
06 import android.os.Bundle;
07 import android.view.View;
08 import android.widget.Button;
09 import android.widget.EditText;
10
11 public class MainTinyDial extends Activity {
12 /** Called when the activity is first created. */
13 @Override
14 public void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16
17 // 按照main.xml來渲染用戶界面
18 setContentView(R.layout.main);
19
20 // 找到存放电话号码的可编辑文本框
21 final EditText PhoneNumberEditText = (EditText) findViewById(R.id.PhoneNumberEditText);
22
23 // 找到拨号按钮
24 Button button = (Button) findViewById(R.id.Button01);
25
26 // 为拨号按钮设置一个点击事件观察者
27 button.setOnClickListener(new Button.OnClickListener() {
28 //实现监听器接口的匿名内部类,其中监听器本身是View类的内部接口
29
30 //实现接口必须实现的onClick方法
31 @Override
32 public void onClick(View v) {
33 // 获得可编辑文本框中的值,也就是电话号码
34 String phoneNumber = PhoneNumberEditText.getText().toString();
35 // new Intent(行为,数据),其中action_dial是拨号行为,数据是电话号码
36 Intent intent = new Intent(Intent.ACTION_DIAL, Uri
37 .parse("tel://" + phoneNumber));
38 // 去调用那些可以处理拨号行为的Activity
39 startActivity(intent);
40 }
41 });
42
43 }
44 }

界面布局的main.xml代码:

1 <?xml version="1.0" encoding="utf-8"?>
2
3 <button>
4 </button>

程序总体设置的AndroidManifest.xml的代码:

1 <?xml version="1.0" encoding="utf-8"?>

好,本讲就到这里。

http://android.yaohuiji.com/archives/383

 

用户界面 View(三)

本讲内容:
常见布局介绍:表格布局TableLayout

点此下载:Android学习指南第七讲源代码

5、表格布局 TableLayout

表格布局TableLayout以行列的形式管理子元素,每一行是一个TableRow布局对象,当然也可以是普通的View对象,TableRow离每放一个元素就是一列,总列数由列数最多的那一行决定。

我们看一个例子:

<?xml version=”1.0″ encoding=”utf-8″?>
<TableLayout android:id=”@+id/TableLayout01″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”
android:stretchColumns=”0″ xmlns:android=”http://schemas.android.com/apk/res/android”>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:text=”色彩透明度测试” android:textSize=”18dip”
android:layout_span=”2″ 合并两列
android:layout_gravity=”center”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>

</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#ff00ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#ff00ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#ee00ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#ee00ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#dd00ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#dd00ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#cc00ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#cc00ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#bb00ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#bb00ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#aa00ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#aa00ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#9900ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#9900ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#8800ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#8800ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#7700ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#7700ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#6600ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#6600ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#5500ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#5500ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#4400ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#4400ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#3300ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#3300ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#2200ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#2200ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#1100ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#1100ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TableRow android:layout_width=”fill_parent”
android:layout_height=”20dip”>
<TextView android:background=”#0000ff00″
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
<TextView android:text=”#0000ff00″ android:background=”#000″
android:textSize=”20dip” android:textColor=”#fff”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
</TextView>
</TableRow>

<TextView android:text=”色彩透明度测试” android:textSize=”18dip”
android:gravity=”center_horizontal” android:layout_width=”fill_parent”
android:layout_height=”wrap_content”>
</TextView>  可以看到这个TextView可以作为TableLayout的一行
</TableLayout>

再看一下显示效果:

image

其中 android:stretchColumns=”0″ 作用是让第一列可以扩展到所有可用空间;下面我们讲一下TableLayout几个重要的属性:

collapseColumns – 设置隐藏那些列,列ID从0开始,多个列的话用”,”分隔
stretchColumns – 设置自动伸展那些列,列ID从0开始,多个列的话用”,”分隔
shrinkColumns -设置自动收缩那些列,列ID从0开始,多个列的话用”,”分隔

可以用”*”来表示所有列,同一列可以同时设置为shrinkable和stretchable。

我们再举一个例子来看一下:

<?xml version=”1.0″ encoding=”utf-8″?>
<TableLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:stretchColumns=”1″>   第二列自动伸展

<TableRow>
<TextView
android:layout_column=”1″     我是第二列
android:text=”打开…”
android:padding=”3dip” /> 元素内容与边界之间保留3dip的距离
<TextView
android:text=”Ctrl-O”
android:gravity=”right”
android:padding=”3dip” />
</TableRow>

<TableRow>
<TextView
android:layout_column=”1″
android:text=”保存…”
android:padding=”3dip” />
<TextView
android:text=”Ctrl-S”
android:gravity=”right” 元素本身的内容向右对齐
android:padding=”3dip” />
</TableRow>

<TableRow>
<TextView
android:layout_column=”1″
android:text=”另存为…”
android:padding=”3dip” />
<TextView
android:text=”Ctrl-Shift-S”
android:gravity=”right”
android:padding=”3dip” />
</TableRow>

<View
android:layout_height=”2dip”
android:background=”#FF909090″ />

<TableRow>
<TextView
android:text=”X”
android:padding=”3dip” />
<TextView
android:text=”导入…”
android:padding=”3dip” />
</TableRow>

<TableRow>
<TextView
android:text=”X”
android:padding=”3dip” />
<TextView
android:text=”导出…”
android:padding=”3dip” />
<TextView
android:text=”Ctrl-E”
android:gravity=”right”
android:padding=”3dip” />
</TableRow>

<View
android:layout_height=”2dip”
android:background=”#FF909090″ />

<TableRow>
<TextView
android:layout_column=”1″
android:text=”退出”
android:padding=”3dip” />
</TableRow>
</TableLayout>

下面是显示效果:

image

我加粗显示的地方都有解释,大家可以留意一下。

Tip:TableRow也是一个Layout,里面的元素会水平排列,如果TableRow的父元素不是TableLayout的话,那么他会表现的像一个LinearLayout。

接下来会讲2个比较复杂的布局,然后讲一些常用的View Widget。

http://android.yaohuiji.com/archives/275

用户界面 View(二)

本讲内容:常用Layout介绍: AbsoluteLayout和RelativeLayout

点此下载:Android学习指南第六讲源代码

3、绝对布局 AbsoluteLayout

绝对定位AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的绝对位置,这种布局简单直接,直观性强,但是由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差。

下面我们举一个例子看看:例子里的机器人图片大小是250X250,可以看到我们使用android:layout_x和android:layout_y来指定子元素的纵横坐标。

<?xml version=”1.0″ encoding=”utf-8″?>
<AbsoluteLayout android:id=”@+id/AbsoluteLayout01″
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
xmlns:android=”http://schemas.android.com/apk/res/android”
android:background=”#fff”>

<ImageView
android:src=”@drawable/android”
android:layout_y=”40dip”
android:layout_width=”wrap_content”
android:layout_x=”35dip”
android:id=”@+id/ImageView01″
android:layout_height=”wrap_content”>
</ImageView>
<TextView
android:layout_height=”wrap_content”
android:layout_width=”fill_parent”
android:id=”@+id/TextView01″
android:text=”Android2.2 学习指南”
android:textColor=”#0f0″
android:textSize=”28dip”
android:layout_y=”330dip”
android:layout_x=”35dip
“>
</TextView>
<TextView
android:layout_height=”wrap_content”
android:layout_width=”fill_parent”
android:id=”@+id/TextView02″
android:text=”图文并茂,理论清晰,操作性强”
android:textColor=”#333″
android:textSize=”18dip”
android:layout_y=”365dip”
android:layout_x=”35dip
“>
</TextView>
</AbsoluteLayout>

让我们看一下在WQVGA的模拟器下的显示效果:

image

再在WVGA800的模拟器下看看显示效果:

image

Tip: 在绝对定位中,如果子元素不设置layout_x和layout_y,那么它们的默认值是0,也就是说它会像在FrameLayout一样这个元素会出现在左上角。

4、相对布局 RelativeLayout

相对布局 RelativeLayout 允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。它灵活性大很多,当然属性也多,操作难度也大,属性之间产生冲突的的可能性也大,使用相对布局时要多做些测试。

下面我们用相对布局再做一次上面的例子,首先放置一个图片,其它两个文本分别相对上一个元素定位:

<?xml version=”1.0″ encoding=”utf-8″?>

<RelativeLayout android:id=”@+id/RelativeLayout01″
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:background=”#fff”
xmlns:android=”http://schemas.android.com/apk/res/android”>

<ImageView android:id=”@+id/ImageView01″
android:src=”@drawable/android”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:layout_marginTop=”40dip”
>
</ImageView>
<TextView
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:id=”@+id/TextView01″
android:text=”Android2.2 学习指南”
android:textColor=”#0f0″
android:textSize=”28dip”
android:layout_below=”@id/ImageView01″
android:layout_centerHorizontal=”true”

android:layout_marginTop=”10dip”>
</TextView>
<TextView
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:id=”@+id/TextView02″
android:text=”图文并茂,理论清晰,操作性强”
android:textColor=”#333″
android:textSize=”18dip”
android:layout_below=”@id/TextView01″
android:layout_centerHorizontal=”true”
android:layout_marginTop=”5dip
“>
</TextView>
</RelativeLayout>

让我们看一下在WQVGA的模拟器下的显示效果:

image

再看一下在更大屏幕(WVGA800)模拟器上的显示效果:

image

从上图可以看到界面效果基本保持了一致,而不是像绝对定位一样龟缩在左上角;同学们看到自动缩放的功能是采用了dip做单位带来的好处。关于dip,不懂的同学可以看我在开发小知识里写的专门的文章。

下面介绍一下RelativeLayout用到的一些重要的属性:

第一类:属性值为true或false
android:layout_centerHrizontal                                           水平居中
android:layout_centerVertical                                            垂直居中
android:layout_centerInparent                                           相对于父元素完全居中
android:layout_alignParentBottom                                     贴紧父元素的下边缘
android:layout_alignParentLeft                                          贴紧父元素的左边缘
android:layout_alignParentRight                                        贴紧父元素的右边缘
android:layout_alignParentTop                                          贴紧父元素的上边缘
android:layout_alignWithParentIfMissing                            如果对应的兄弟元素找不到的话就以父元素做参照物

第二类:属性值必须为id的引用名“@id/id-name”
android:layout_below                          在某元素的下方
android:layout_above                          在某元素的的上方
android:layout_toLeftOf                       在某元素的左边
android:layout_toRightOf                     在某元素的右边

android:layout_alignTop                      本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft                      本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom                 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight                    本元素的右边缘和某元素的的右边缘对齐

第三类:属性值为具体的像素值,如30dip,40px
android:layout_marginBottom              离某元素底边缘的距离
android:layout_marginLeft                   离某元素左边缘的距离
android:layout_marginRight                 离某元素右边缘的距离
android:layout_marginTop                   离某元素上边缘的距离

我们再把上面的例子重新做一遍,这一次多放一些属性在里面,大家试验一下:

<?xml version=”1.0″ encoding=”utf-8″?>

<RelativeLayout android:id=”@+id/RelativeLayout01″
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:background=”#cfff” 色彩的设置是argb,第一个c是透明度
xmlns:android=”http://schemas.android.com/apk/res/android”>

<ImageView android:id=”@+id/ImageView01″
android:src=”@drawable/android”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_marginTop=”40dip”
android:layout_centerHorizontal=”true”>
</ImageView>

<TextView
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:id=”@+id/TextView01″
android:text=”Android2.2 学习指南”
android:textColor=”#0f0″
android:textSize=”28dip”
android:layout_below=”@id/ImageView01″
android:layout_centerHorizontal=”true”
android:layout_marginTop=”10dip”>
</TextView>

<TextView
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:id=”@+id/TextView02″
android:text=”图文并茂,理论清晰,操作性强”
android:textColor=”#333″
android:textSize=”18dip”
android:layout_below=”@id/TextView01″
android:layout_centerHorizontal=”true”
android:layout_marginTop=”5dip”>
</TextView>

<TextView
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:id=”@+id/TextView03″
android:text=”alignTop”
android:textColor=”#333″
android:textSize=”18dip”
android:layout_alignTop=”@id/ImageView01″  和ImageView01上边缘对齐
android:layout_centerHorizontal=”true”>
</TextView>

<TextView
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:id=”@+id/TextView04″
android:text=”alignLeft”
android:textColor=”#333″
android:textSize=”18dip”
android:layout_alignLeft=”@id/ImageView01″
android:layout_centerHorizontal=”true”>
</TextView>

<TextView
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:id=”@+id/TextView05″
android:text=”alignRight”
android:textColor=”#333″
android:textSize=”18dip”
android:layout_alignRight=”@id/ImageView01″
android:layout_centerHorizontal=”true”>
</TextView>

<TextView
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:id=”@+id/TextView06″
android:text=”alignBottom”
android:textColor=”#333″
android:textSize=”18dip”
android:layout_alignBottom=”@id/ImageView01″
android:layout_centerHorizontal=”true”>
</TextView>
</RelativeLayout>

image

好吧今天就讲到这里。

http://android.yaohuiji.com/archives/234