(原创)Android初学者实践
2013-04-10 20:34 Keiven_LY 阅读(338) 评论(0) 编辑 收藏 举报1.1 Android开发环境搭建
搭建 Android 开发环境的第一步是下载与开发环境有关的软件资源,这些资源主要包括JDK、Eclipse、Android SDK及 Android 的支持插件ADT。
1.1.1 Java运行环境的安装
Java运行环境(Java Runtime Environment,JRE)是运行java程序所必须的环境集合,包括JVM标准实现及java核心类库。
步骤:解压jre.zip—>jre—>jre.exe
1.1.2 JDK的安装
双击并运行下载好的 JDK 安装文件jdk.exe即可
1.1.3 Android SDK的安装
①Eclipse 不需要安装,只需将下载的压缩包解压到硬盘上某个目录即可
步骤:解压android-sdk.zip—>AndroidDeveloper —>eclipse—>eclipse.exe
②启动 Eclipse,依次选择“Window” —>“Preferences” —>“Android”,弹出如图1.1所示:
图1.1 Preferences界面
③单击图1.1中所示的“Browse...”按钮,弹出如图1.2所示的对话框
图1.2 路径选择对话框
④在图1.2中选择android-sdk-windows文件所在路径,单击“确定”按钮即可。
⑤在图1.1中选择API版本,这里选择2.1版本,单击“Apply” —>“OK”。
1.1.4 虚拟设备AVD的创建
①启动 Eclipse,依次选择“Window” —> “Android SDK and AVD Manager”,如图1.3所示:
图1.3 Android SDK and AVD Manager 界面
②单击如图1.3中所示的“New…”按钮,弹出如图1.4所示的对话框。
图1.4 创建AVD对话框
③在图1.4所示的对话框中设置所要创建的 AVD 的名称,API版本,单击“Create AVD”按钮完成 AVD 的创建。创建成功的AVD如图1.3中显示的
④在如图1.34所示界面中单击“Start…”按钮,将会启动所选的 AVD,本例中将启动名为“And-21”的 AVD,启动后的虚拟设备如图1.5所示:
图1.5 启动后的虚拟设备
2.1 Hello World 的创建
1.创建一个新的Android项目
启动Eclipse, 选择 File -> New -> Android Project 菜单,弹出对话框如图2.1所示:
图2.1 新建项目对话框
2. 填写项目的细节参数
项目名称(Project name):Hello World
应用程序名(Application name):Helloworld
包名(Package name):com.java.hello
创建活动名(Create Activity):helloworld
设置AVD API版本(Build Target):Android 2.1
以上操作完成后,点击图2.1 中的“Finish”按钮后,自动生成项目,如图2.2所示
图2.2 Hello World项目框架
3. 目录结构分析:
①src:该目录下存放的是改项目的源代码,可以对该目录下的源码文件即java文件进行编写。
②gen:该目录下的文件是ADT自动生成的,且只定义了一个R.java文件,在该类中创建唯一的ID,在项目中使用这些资源时,会通过该类得到资源的引用。
③Android2.1:该目录中存放的是该项目支持的JAR包。
④assets:该目录用于存放项目相关资源文件,如文本文件。
⑤res:该目录用于存放应用程序中经常用到的资源文件,包括多个子目录,其中以drawable开头的三个文件存放.png、.jpg图片资源;layout文件夹存放应用程序的布局文件;raw用于存放应用程序用到的音频资源;value存放的是所有XML格式的资源文件,如字符串资源(string.xml)、颜色资源(colors.xml)等。
⑥Androidmanifest.xml:该文件为应用程序的系统控制文件。
⑦default.properties:该文件为项目的配置文件,不需人为改动。
4. 修改hellowold.java文件:
package com.java.hello; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class hellowold extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView (R.layout.main); TextView tv = new TextView( this ); tv.setText( " 这是一个测试 Android 的 helloWorld" ); setContentView(tv); } }
5. 运行程序:
选中目录栏中的项目Hello World,右击Run as->Android Application
运行结果如图2.3所示:
图2.3 Hello World运行结果
2.2 布局
2.2.1 线性布局(LinearLayout)
线性布局可分为两种:横向布局和纵向布局
设置线性布局为水平方向:android:orientation="horizontal"
设置线性布局为垂直方向:android:orientation="vertical"
设置正比例分配控件范围:android:layout_weight="1"
设置控件显示位置:android:gravity="center_horizontal"
2.2.2相对布局(RelativeLayout)
设置距父元素右对齐:android:layout_alignParentRight="true"
设置该控件在id为re_edit_0控件的下方:android:layout_below="@id/re_edit_0"
设置该控件在id为re_image_0控件的左边:android:layout_toLeftOf="@id/re_iamge_0"
设置当前控件与id为name控件的上方对齐:android:layout_alignTop="@id/name"设置偏移的像素值:android:layout_marginRight="30dip"
相对布局案例:
①布局文件main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/RelativeLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 声明一个相对布局 --> <ImageView android:id="@+id/ImageView01" android:background="@drawable/center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" > <!-- 声明一个ImageView控件 --> </ImageView> <ImageView android:id="@+id/ImageView02" android:background="@drawable/down" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/ImageView01" android:layout_alignTop="@id/ImageView01" > <!-- 声明一个ImageView控件 --> </ImageView> <ImageView android:id="@+id/ImageView03" android:background="@drawable/up" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/ImageView01" android:layout_alignLeft="@id/ImageView01" > <!-- 声明一个ImageView控件 --> </ImageView> </RelativeLayout>
注:该部分的主要工作是在onCreat方法中奖Activity的当前屏幕设置为main.xml布局文件。
③运行结果如图2.4所示:
图2.4 相对布局案例
2.2.3帧布局(FrameLayout)
原理是在控件中绘制任何一个控件都可以被后绘制的控件覆盖,最后绘制的控件会盖住之前的控件。
2.2.4绝对布局(AbsoluteLayout)
所谓绝对布局,是指屏幕中所有空间的摆放由开发人员通过设置控件坐标来指定,控件容器不再负责管理子控件的位置。
2.2.5表格布局(TableLayout)
TableLayout类以行和列的形式管理控件,每行为一个TableRow对象,也可以是一个View对象,当为View对象是,该View对象将跨越该行的所有列。
2.3 控件类
2.3.1Activity类
活动是最基本的Android应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件作出响应。
简单理解Activity,代表一个用户所能看到的屏幕,Activity主要处理一个应用的整体性工作,例如,监听系统事件(按键事件等)、为用户显示指定的View,启动该其他的Activity等。所有应用的Activity都继承与android.app.Activity类,该类是Android提供的基层类,其他的Activity继承该父类后,通过Override父类的方法实现各种功能。
2.3.2View类
View类是所有可视化控件的基类,主要提供了控件绘制和事件处理的方法。
创建用户界面所使用的控件都继承自View,如TextView、Button、CheckBox等。
View类常用属性及对应方法:
设置背景:setBackgroundResource(int)
设置View是否响应单击事件:setClickable(boolean)
设置View的标识符(通过findViewById方法获取):setId(int)
设置View是否响应长单击事件:setLongClickable(boolean)
2.3.3Intent类
Android使用了Intent这个特殊类,实现了屏幕之间的切换。Inten类描述一个应用将会做什么,在Intent的描述结构中,有两个重要的组成部分:动作(Action)和动作对应的数据(Data)。
通过解析各种intent,从一个屏幕切换到另一个屏幕是很简单的。当向前切换时,activity将会调用startActivity(IntentmyIntent)方法。
2.3.4基本控件
⑴ TextView类:继承自View类,其功能时想用户线上文本内容同时可选择性的让用户编辑文本。
⑵ EditText类:继承自TextView,其与TextView最大的不同就是用户可以对EditText控件进行编辑,同时还可以对EditText控件设置监听器,用来检测用户的输入是否合法等。
⑶ Button类:继承自TextView,用户可以对Button控件执行按下或单击等操作。主要用法是对Button控件设置View.OnClickListener监听器并在监听器的实现代码中开发按钮按下时间的处理代码。
2.4 菜单(Menu)
Android平台下所提供的菜单主要分为:选项菜单(Options Menu)、上下文菜单(Context Menu)和子菜单(Submenu)。
在Android中通过回调的方法来创建菜单并处理菜单按下的事件。处理菜单选中的时间方法有两种:一是通过回调方法onOptionsItemSelected来处理;二是为每个菜单项MenuItem对象添加OnMenuItemClickListener监听器来处理。
2.5 列表视图(ListView)
ListView类位于android.widget包下,是一种列表视图,将各个控件显示在一个垂直且可以滚动的列表中。下面是一个ListView的案例。
①声明所有的字符串资源及颜色资源:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">您选择了</string> <string name="app_name">ListViewExample</string> <string name="andy">Andy Rubin \nAndroid的创造者</string> <string name="bill">Bill Joy \nJava创造者之一</string> <string name="edgar">Edgar F. Codd \n关系数据库之父</string> <string name="torvalds">Linus Torvalds \nLinux之父</string> <string name="turing">Turing Alan \nIT的祖师爷</string> <string name="ys">您选择了</string> </resources> <?xml version="1.0" encoding="utf-8"?> <resources> <color name="red">#fd8d8d</color> <color name="green">#9cfda3</color> <color name="blue">#8d9dfd</color> <color name="white">#FFFFFF</color> <color name="black">#000000</color> <color name="gray">#050505</color> </resources>
②编写布局文件(main.xml):
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/TextView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="24dip" android:textColor="@color/white" android:text="@string/hello"/> <ListView android:id="@+id/ListView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:choiceMode="singleChoice"/> </LinearLayout>
注:首先添加一个垂直的线性布局,然后向布局中添加一个TextView和一个ListView控件
③编写Java文件:
package wyf.yt1; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; public class Sample_5_3 extends Activity { //所有资源图片(andy、bill、edgar、torvalds、turing)id的数组 int[] drawableIds= {R.drawable.andy,R.drawable.bill,R.drawable.edgar,R.drawable.torvalds,R.drawable.turing}; //所有资源字符串(andy、bill、edgar、torvalds、turing)id的数组 int[] msgIds={R.string.andy,R.string.bill,R.string.edgar,R.string.torvalds,R.string.turing}; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView lv=(ListView)this.findViewById(R.id.ListView01);//初始化ListView BaseAdapter ba=new BaseAdapter(){//为ListView准备内容适配器 public int getCount() {return 5;}//总共5个选项 public Object getItem(int arg0) { return null; } public long getItemId(int arg0) { return 0; } public View getView(int arg0, View arg1, ViewGroup arg2) { //动态生成每个下拉项对应的View,每个下拉项View由LinearLayout //中包含一个ImageView及一个TextView构成 LinearLayout ll=new LinearLayout(Sample_5_3.this);//初始化LinearLayout ll.setOrientation(LinearLayout.HORIZONTAL); //设置朝向 ll.setPadding(5,5,5,5);//设置四周留白 ImageView ii=new ImageView(Sample_5_3.this);//初始化ImageView ii.setImageDrawable(getResources().getDrawable(drawableIds[arg0]));//设置图片 ii.setScaleType(ImageView.ScaleType.FIT_XY); ii.setLayoutParams(new Gallery.LayoutParams(100,98)); ll.addView(ii);//添加到LinearLayout中 TextView tv=new TextView(Sample_5_3.this);//初始化TextView tv.setText(getResources().getText(msgIds[arg0]));//设置内容 tv.setTextSize(24);//设置字体大小 tv.setTextColor(Sample_5_3.this.getResources().getColor(R.color.white));//设置字体颜色 tv.setPadding(5,5,5,5);//设置四周留白 tv.setGravity(Gravity.LEFT); ll.addView(tv);//添加到LinearLayout中 return ll; } }; lv.setAdapter(ba);//为ListView设置内容适配器 lv.setOnItemSelectedListener(//设置选项选中的监听器 new OnItemSelectedListener(){ public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {//重写选项被选中事件的处理方法 TextView tv=(TextView)findViewById(R.id.TextView01);//获取主界面TextView LinearLayout ll=(LinearLayout)arg1;//获取当前选中选项对应的LinearLayout TextView tvn=(TextView)ll.getChildAt(1);//获取其中的TextView StringBuilder sb=new StringBuilder();//用StringBuilder动态生成信息 sb.append(getResources().getText(R.string.ys)); sb.append(":"); sb.append(tvn.getText()); String stemp=sb.toString(); tv.setText(stemp.split("\\n")[0]);//信息设置进主界面TextView } public void onNothingSelected(AdapterView<?> arg0){} } ); lv.setOnItemClickListener(//设置选项被单击的监听器 new OnItemClickListener(){ public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {//重写选项被单击事件的处理方法 TextView tv=(TextView)findViewById(R.id.TextView01);//获取主界面TextView LinearLayout ll=(LinearLayout)arg1;//获取当前选中选项对应的LinearLayout TextView tvn=(TextView)ll.getChildAt(1);//获取其中的TextView StringBuilder sb=new StringBuilder();//用StringBuilder动态生成信息 sb.append(getResources().getText(R.string.ys)); sb.append(":"); sb.append(tvn.getText()); String stemp=sb.toString(); tv.setText(stemp.split("\\n")[0]);//信息设置进主界面TextView } } ); } }
④运行结果如图2.5所示:
图2.5 ListView案例运行界面
说明:当点击第一个人时,界面如图2.6所示:
图2.6 ListView的点击事件1
当点击第二个人时,界面如图2.7所示:
图2.7 ListView的点击事件2