代码改变世界

(原创)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