您的当前位置:首页正文

移动应用软件开发技术-实验报告模板

2021-04-05 来源:爱go旅游网
课程名称:

实验项目:《移动应用软件开发技术》课程实验

实验地点:

专业班级:

学生姓名:指导教师:

实 验 报 告

移动应用软件开发技术 行勉楼A306 软件1319班 学号: ********** ***

**

2016年 4 月 22 日

太原理工大学学生实验一报告

学院名称 学生姓名 课程名称 软件学院 张卫东 移动应用软件开发技术 专业班级 实验日期 实验题目 软件1319班 学号 成绩 2013005655 2016.3.18 Android开发环境搭建 一、实验目的 搭建Android开发环境,学习使用Eclipse开发工具进行Android 应用开发的整个流程,为后续实验做好基本准备工作。 二、实验要求 1、掌握Android SDK的安装、配置、使用。 2、掌握Eclipse集成开发环境的使用。 3、实现第一个Android应用程序。 三、实验原理及步骤 1、下载安装JDK 从Oracle公司官方网站下载JDK(当前下载页面地址为http://www.oracle.com/technetwork/java/javase/downloads/index.html),选择下载自己电脑系统的对应版本即可。 JDK默认安装成功后,会在系统目录下出现两个文件夹,一个代表jdk,一个代表jre。

2、下载安装Eclipse Eclipse为Java应用程序及Android开发的IDE(集成开发环境)。Eclipse不需要安装,下载后把解压包解压到你想安装的地方,打开时设置你的工作目录即可使用。 Eclipse官方网站提供下载( http://www.eclipse.org/downloads/ )的Eclipse版本有多个,这里选择下载Eclipse IDE for Java EE Developers这个版本。 3、下载安装Android SDK Android SDK提供了开发Android应用程序所需的API库和构建、测试和调试Android应用程序所需的开发工具。 从官方网站(http://developer.android.com)或(http://www.androiddevtools.cn)下载Android SDK Tools。

安装或解压Android SDK到任意目录下。 在Android SDK的安装目录下,运行“SDK Manager.exe”(如不能直接运行,可以管理员身份运行),SDK Manager负责下载或更新不同版本的SDK包,我们看到默认安装的SDK Manager只安装了一个版本的SDK tools。 打开Android SDK Manager,它会自动获取可安装的sdk版本,但是国内有墙,可能会出现获取失败的情况。

可以使用(http://www.androiddevtools.cn)提供的Android SDK在线更新镜像服务器来安装。

再打开Android SDK Manager.exe,正常情况下就可以下载Android的各个版本的sdk了。你只需要选择想要安装或更新的安装包安装即可(最后选择4.0以上版本)。这里是比较耗时的过程(通常在1个小时以上),还会出现下载失败的情况,失败的安装包只需要重新选择后再安装就可以了。 4、为Eclipse安装ADT插件 我们已经配置好了java的开发环境,安装了开发Android的IDE,下载安装了Android SDK,但是Eclipse还没有和Android SDK进行关联,也就是它们现在是互相独立的,就好比枪和子弹分开了。为了使得Android应用的创建,运行和调试更加方便快捷,Android的开发团队专门针对Eclipse IDE定制了一个插件:Android Development Tools(ADT)。 可以从(http://www.androiddevtools.cn)下载ADT的最新版本。 安装ADT的步骤: 1) 启动Eclipse,点击 Help菜单 -> Install New Software… ,点击弹出对话框中的Add… 按钮。 2) 在弹出的对话框中点击Archive…按钮,选择之前下载的ADT.zip文件,然后点击OK按钮,返回之前的对话框,我们这时可以看到Developer Tools选项。

3) 选择Developer Tools选项,然后一路“下一步”就可以了。 4) 安装好后会要求你重启Eclipse,Eclipse会根据目录的位置智能地和它相同目录下Android SDK进行关联,否则会弹出配置Android SDK对话框,你可以选择安装新的SDK或使用已经存在的SDK。 5) Eclipse关联好Android SDK以后,我们在windows上的Android开发环境搭建就完成了,用Eclipse的File——》New——》Project...新建一个项目的时候,就会看到建立Android项目的选项了。 5、配置Android虚拟设备(AVD) 在Eclipse中,运行“Window->AVD Manager”,在出现的AVD Manager对话框中显示了已经创建的模拟器; 选择已经创建的模拟器,点击“Start”按钮,可以启动该模拟器。 点击“Create”按钮,出现“Create New AVD”对话框,输入AVD Name、Target等信息,点击“OK”按钮可以创建新的模拟器。

6、创建并运行第一个Android应用程序 启动Eclipse,选择File->New->Project…,选择Android 下的Android Application Project,单击Next按钮。 在创建新的Android应用项目对话框中,填写应用程序名,项目名,包名;选择新建项目的SDK版本等信息;然后一路点击next按钮,完成新建项目。

在Eclipse中启动模拟器(见步骤五)。 在Package Explore中选择新建的项目工程,选择Run->Run As>Android Appliction。运行结果如下。 四、实验核心代码 五、实验结果及分析 新建虚拟机,运行Eclipse的实验一,出来的结果为“hello android”。

六、心得体会 通过这次的实验,使我初步认识了Android,了解了Android是通过Java语言编译的,更深层次的了解了Java语言的强大,对Java语言更有兴趣。 实验地点 行勉楼A306 指导教师 马垚

太原理工大学学生实验二报告

学院名称 学生姓名 课程名称 软件学院 张卫东 移动应用软件开发技术 专业班级 实验日期 实验题目 软件1319 2016.3.25 学号 成绩 2013005655 Android 基本控件的使用 一、实验目的 熟悉Android开发中的UI界面设计,主要包括了解和熟悉界面布局类型,以及常用控件的使用。 二、实验要求 1、了解View类及ViewGroup类。 2、掌握FrameLayout、LinearLayout、TableLayout、RelativeLayout、AbsoluteLayout五种界面布局类型。 3、掌握TextView、EditText、Button等常用控件的使用。 三、实验原理及步骤 1、认真学习课本P90页示例。 2、根据以上示例,完成一个注册界面,界面中至少要包含账号(EditText)、密码(EditText)、性别(RadioButton)、爱好(CheckBox)、出生日期(DatePicker)以及提交按钮(Button/ImageButton)等信息。界面要有适当的提示(TextView),布局要合理,背景及字体等设置要美观。 四、实验核心代码 package com.example.biaobai; import java.lang.reflect.GenericDeclaration; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import android.R.string; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.DatePickerDialog;

import android.app.DatePickerDialog.OnDateSetListener; import android.app.Dialog; import android.content.DialogInterface; import android.content.DialogInterface.OnMultiChoiceClickListener; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.graphics.YuvImage; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; import android.widget.ImageButton; import android.widget.TextView; import android.widget.TimePicker; import android.widget.Toast; public class Activity3MainActivity extends Activity { private ImageButton bt; private Button bt2; private EditText edit1; private EditText edit2; private EditText edit3; private EditText edit4; private EditText edit5; private EditText edit6; private String items[]; private String item2[];

private int mYear; private int mMonth; private int mDay; String text=\"\"; // 对控件对象进行声明 DBhelper helper = null; protected android.content.DialogInterface.OnClickListener listener; private View date; @Override protected void onCreate(Bundle savedInstanceState) { } requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity3_main); helper = new DBhelper(getApplicationContext()); bt = (ImageButton) findViewById(R.id.tiao); bt2 = (Button) findViewById(R.id.cz); edit1 = (EditText) findViewById(R.id.zhanghao); edit2 = (EditText) findViewById(R.id.mima); edit3 =(EditText) findViewById(R.id.xingbie); edit4 = (EditText) findViewById(R.id.youxiang); edit5 = (EditText) findViewById(R.id.xuanai); edit6 = (EditText) findViewById(R.id.chusheng); date = findViewById(R.layout.date_dialog); edit5.getText().toString(); // 3.给按钮设置点击侦听 bt.setOnClickListener(new MyOnClickListener()); items=new String[]{\"男\女\item2=new String[]{\"听歌\看书\旅游\

class MyOnClickListener implements OnClickListener { } public void click1(View v) { } public void insertData(String zhang, String mi) { if (zhang.equals(\"\")) { Toast.makeText(getApplicationContext(), \"请输入账号!\edit1.setText(\"\"); edit2.setText(\"\"); edit3.setText(\"\"); edit4.setText(\"\"); edit5.setText(\"\"); edit6.setText(\"\"); @Override public void onClick(View v) { } // TODO Auto-generated method stub // 4.创建意图对象 Intent intent = new Intent(); intent.setClass(Activity3MainActivity.this, MainActivity.class); Activity3MainActivity.this.startActivity(intent); 1).show(); } else if (mi.equals(\"\")) { Toast.makeText(getApplicationContext(), \"请输入密码!\1).show(); } else if(zhang!=\"\"&&mi!=\"\"){ String sql = \"insert into

student(zhanghao,mima)values('\"+zhang+\"','\"+mi+\"')\"; } public void click2(View v) { } public void select1(View v){ AlertDialog.Builder builder=new Builder(Activity3MainActivity.this); builder.setTitle(\"选择你的性别\"); builder.setSingleChoiceItems(items, 0,new String zhang = edit1.getText().toString(); String mi = edit2.getText().toString(); insertData(zhang, mi); } SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL(sql); Toast.makeText(getApplicationContext(), \"注册成功!\DialogInterface.OnClickListener() { } public void selck(View v) { new AlertDialog.Builder(Activity3MainActivity.this).setTitle(\"请选 @Override public void onClick(DialogInterface dialog, int which) { } // TODO 自动生成的方法存根 edit3.setText(items[which]); dialog.dismiss(); }).show(); 择你的爱好\") .setMultiChoiceItems(item2,null,new OnMultiChoiceClickListener() {

@Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { }) .setPositiveButton(\"取消\.setNegativeButton(\"确定\.show(); } // TODO Auto-generated method stub text =text+ item2[which]; edit5.setText(text); } public void chusheng(View v){ Calendar calendar = Calendar.getInstance(); new DatePickerDialog(Activity3MainActivity.this, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { }, } calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), // TODO Auto-generated method stub int month=monthOfYear+1; edit6.setText(year+\"年\"+month+\"月\"+dayOfMonth+\"日\"); calendar.get(Calendar.DAY_OF_MONTH)).show(); } }

四、实验结果及分析 运行Eclipse后,结果进入登录界面,点击注册按钮,跳转到注册界面如下: 然后分别点击添加性别和爱好以及出生年与日如下: 然后点击注册按钮,会弹出注册成功对话框如下结果:

注册的数据(账号和密码)插入数据库如下结果: 六、心得体会: 通过本次实验学会了RadioButton,CheckBox,DatePicker,EditText的使用,同时额外学会了使用数据库,把注册的数据插入数据库,以及数据库的设计和一些数据库需要注意的一些细节,使我对Android越来越感兴趣。 实验地点 行勉楼A306 指导教师 马垚

太原理工大学学生实验三报告

学院名称 学生姓名 课程名称 软件学院 张卫东 移动应用软件开发技术 专业班级 实验日期 实验题目 软件1319 2016.4.1 学号 成绩 2013005655 Activity、Intent组件的使用 一、实验目的 熟悉Activity和Intent组件的使用。Activity是Android中最常用的组件,实现应用程序的用户界面显示,一个Activity展现一个可视化的用户界面。Intent是各组件的桥梁,实现各组件之间的交互与通信。 二、实验要求 1、了解Activity的生命周期。 2、了解Intent的6个组成部分。 3、使用Intent实现Activity之间的跳转和信息传递。 三、实验原理及步骤 1、认真学习课本P62页示例。 2、根据以上示例,完成一个问答系统:有两个Activity分别为MainActivity和AnswerActivity。MainActivity为应用首页,里面包含一个EditText、一个TextView和一个Button,EditText可以输入问题,TextView为空,单击Button可以跳转到AnswerActivity上。AnswerActivity也包含一个EditText,一个TextView和一个Button,TextView显示从MainActivity传递来的问题,EditText可以输入答案,单击Button可以跳回到MainActivity,并把从AnswerActivity传回的答案显示在TextView里。如此循环往复。 四、实验核心代码 package com.example.shiyansan; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View;

import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { private TextView text; private EditText edt2; private Button postParamBtn; public static final String INFO_USER_NAME = \"INFO_USER_NAME\"; @Override protected void onCreate(Bundle savedInstanceState) { } @Override public boolean onCreateOptionsMenu(Menu menu) { } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (TextView) findViewById(R.id.text); edt2 = (EditText) findViewById(R.id.info_user_name); Intent intent = getIntent(); String X = intent.getStringExtra(Main2Activity.User); text.setText(X);

} } // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { } return super.onOptionsItemSelected(item); return true; public void tijiao(View v){ } Intent intent = new Intent(); intent.setClass(MainActivity.this,Main2Activity.class); String user2 = edt2.getText().toString(); intent.putExtra(INFO_USER_NAME, user2); MainActivity.this.startActivity(intent); package com.example.shiyansan; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class Main2Activity extends Activity { private TextView text2;

private EditText edt; private Button bt; public static final String User = \"user\"; @Override protected void onCreate(Bundle savedInstanceState) { } @Override public boolean onCreateOptionsMenu(Menu menu) { } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main2, menu); return true; requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); text2 = (TextView) findViewById(R.id.user_name); edt = (EditText) findViewById(R.id.ed); bt = (Button) findViewById(R.id.btn); Intent intent = getIntent(); String Y = intent.getStringExtra(MainActivity.INFO_USER_NAME); text2.setText(Y);

} } } return super.onOptionsItemSelected(item); public void fanhui(View v){ } Intent intent = new Intent(); intent.setClass(Main2Activity.this,MainActivity.class); CharSequence user1 = edt.getText().toString(); intent.putExtra(User,user1); Main2Activity.this.startActivity(intent); 五、实验结果及分析 运行Eclipse结果如下:

其中一个Activity输入数据,点击提交按钮,跳转到另一个Activity,用来接收数据如下图: 在“答案”的页面输入数据,点击返回按钮,跳转到另一个页面用来接收数据如下图所示:

六、心得体会: 通过这次的实验学会了Intent进行两个Activity的传值,以及了解了Intent的六个组成部分,学会了界面的优化,给用户更好的体验。 实验地点 行勉A306 指导教师 马垚

太原理工大学学生实验四报告

学院名称 学生姓名 课程名称 软件学院 张卫东 移动应用软件开发技术 专业班级 实验日期 实验题目 软件1319 2016.4.15 学号 成绩 2013005655 Android 事件处理及高级控件 一、实验目的 掌握Android的事件处理机制;熟悉Android常用的三种适配器,并能与相关控件搭配使用;掌握一些常用复杂控件的使用;能结合控件、适配器及事件处理机制设计出较为复杂的功能。 二、实验要求 1、掌握基于回调机制的和基于监听接口的2种事件处理机制。 2、掌握ArrayAdapter、SimpleAdapter和BaseAdapter3种常用适配器。 3、掌握Spinner、ListView、GridView、Gallery、TabHost、ImageSwitcher等一些常用复杂控件的使用。 三、实验原理及步骤 1、认真学习课本P149页示例。 2、根据以上示例,模拟一个APP下载中心界面,该界面由一个TabHost构成,包含2个选项卡,分别是“游戏”和“应用”,每个选项卡内部由一个ListView构成,分别显示热门游戏列表和热门应用列表,ListView中的每一项包含3部分,APP图标、APP名称、以及下载按钮。当点击ListView中某一项时,跳转到对应APP的详细介绍界面,此界面应包含一个返回按钮,点击后返回到列表界面。 四、实验核心代码 package com.example.base; import android.app.Activity; import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.Window;

import android.widget.TabHost; import android.widget.TabHost.TabSpec; public class TabHostActivity extends TabActivity { public TabHost tabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); tabHost = getTabHost(); TabSpec tabSpase1 = (TabSpec)tabHost.newTabSpec(\"title1\").setIndicator(\"游戏\"); tabSpase1.setContent(new Intent(TabHostActivity.this,ListViewBaseAdtActivity.class)); tabHost.addTab(tabSpase1); TabSpec tabSpase2 = (TabSpec)tabHost.newTabSpec(\"title2\").setIndicator(\"应用\"); tabSpase2.setContent(new Intent(TabHostActivity.this,YingyonActivity.class)); } package com.example.base; import android.R.string; import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.view.Gravity; import android.view.Menu; } tabHost.addTab(tabSpase2);

import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.Gallery; import android.widget.Gallery.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; public class ListViewBaseAdtActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listv_ba); ListView lv = (ListView) findViewById(R.id.ListView02);//初始化ListView BaseAdapter ba = new BaseAdapter() { //为ListView准备内容适配器 //所有图片资源名(tb_baidu,tb_sina,tb_tencent,tb_netease)的数组 String[] images = getResources().getStringArray(R.array.images); //所有标题资源名(baidu,sina,tencent,netease)的数组 String[] titles = getResources().getStringArray(R.array.titles); //所有网址资源名(baiduurl,sinaurl,tencenturl,neteaseurl)的数组

String[] infos = getResources().getStringArray(R.array.infos); @Override public int getCount() { // TODO Auto-generated method stub return images.length; //返回数组的大小,即数组元素个数 } @Override public Object getItem(int arg0) { } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; // TODO Auto-generated method stub return null; } //动态生成每个下拉项对应的View,每个下拉项View由LinearLayout中包含一个 //ImageView,两个内嵌的LinearLayout构成,其中一个包含两个TestView,另一个中包含一个按钮 @Override public View getView(int arg0, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub LinearLayout ll = new LinearLayout(ListViewBaseAdtActivity.this); //初始化LinearLayout ll.setOrientation(LinearLayout.HORIZONTAL);//设置朝向 ImageView img = new ImageView(ListViewBaseAdtActivity.this);//初始化ImageView

img.setImageDrawable(getResources().getDrawable(getResources() .getIdentifier(images[arg0], \"drawable\getPackageName()))); img.setLayoutParams(new Gallery.LayoutParams(49,50)); img.setPadding(5, 5, 5,5); ll.addView(img); LinearLayout //添加LinearLayout中 lll = new LinearLayout(ListViewBaseAdtActivity.this);//初始化LinearLayout lll.setOrientation(LinearLayout.VERTICAL);//设置朝向 lll.setLayoutParams(new LinearLayout.LayoutParams (LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); TextView tit = new TextView(ListViewBaseAdtActivity.this);//初始化TextView tit.setText(getResources().getText( getResources().getIdentifier(titles[arg0], \"string\ //设置内容 getPackageName()))); tit.setLayoutParams(new LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT)); tit.setTextSize(18);//设置字体大小 tit.setTextColor(getResources().getColor(R.color.black));//设置字体颜色 lll.addView(tit); // 添加到LinearLayout中 TextView inf = new TextView(ListViewBaseAdtActivity.this);//初始化TextView inf.setText(getResources().getText(getResources().getIdentifier(infos[arg0], \"string\ //设置内容

inf.setLayoutParams(new LayoutParams(LinearLayout .LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT)); inf.setTextSize(13); //设置字体的大小 inf.setTextColor(getResources().getColor(R.color.black));//设置字体颜色 lll.addView(inf); //添加到 LinearLayout中 ll.addView(lll); //添加到 ll2 = new LinearLayout中 LinearLayout LinearLayout(ListViewBaseAdtActivity.this); //初始化LinearLayout ll2.setOrientation(LinearLayout.HORIZONTAL);//设置朝向 ll2.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 0, 3, 0);//setPadding参数ll2.setPadding(3, (left,top,right,bottom) ll2.setGravity(Gravity.RIGHT); Button btn = new Button(ListViewBaseAdtActivity.this);//初始化Button btn.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); btn.setText(\"下载\"); btn.setId(arg0);//设置Button的Id btn.setFocusable(false);//*****不让按钮抢占焦点,当按钮点击的时候给它焦点 //设置按钮的监听器

btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub startActivity(new Intent(ListViewBaseAdtActivity.this,XiaZaiActivity.class)); }; lv.setAdapter(ba);//为LietView设置内容适配器 lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, } } }); ll2.addView(btn);//将btn添加到ll2中 ll.addView(ll2);//将ll2添加到ll中 return ll; long arg3) { //重写选项被选中事件的处理方法 if (arg2==0){ Intent intent = new Intent(ListViewBaseAdtActivity.this,Item1Activity.class); } if (arg2==1){ startActivity(intent); finish();

Intent intent = new Intent(ListViewBaseAdtActivity.this,Item2Activity.class); } if (arg2==2){ Intent intent = new ListViewBaseAdtActivity.this.startActivity(intent); finish(); Intent(ListViewBaseAdtActivity.this,Item3Activity.class); } if (arg2==3){ Intent intent = new startActivity(intent); finish(); Intent(ListViewBaseAdtActivity.this,Item4Activity.class); } if (arg2==4){ Intent intent = new startActivity(intent); finish(); Intent(ListViewBaseAdtActivity.this,Item5Activity.class); } if (arg2==5){ Intent intent = new startActivity(intent); finish(); Intent(ListViewBaseAdtActivity.this,Item6Activity.class); } startActivity(intent); finish();

package com.example.base; import android.R.string; import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.Gallery; import android.widget.Gallery.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; public class YingyonActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); setContentView(R.layout.activity_yingyon); ListView lv = (ListView) findViewById(R.id.ListView02);//初始化ListView BaseAdapter ba = new BaseAdapter() { //为ListView准备内容适配器 //所有图片资源名(tb_baidu,tb_sina,tb_tencent,tb_netease)的数组 String[] yimages = getResources().getStringArray(R.array.yimages); //所有标题资源名(baidu,sina,tencent,netease)的数组 String[] ytitles = getResources().getStringArray(R.array.ytitles); //所有网址资源名(baiduurl,sinaurl,tencenturl,neteaseurl)的数组 String[] yinfos = getResources().getStringArray(R.array.yinfos); @Override public int getCount() { // TODO Auto-generated method stub return yimages.length; //返回数组的大小,即数组元素个数 } @Override public Object getItem(int arg0) { } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub // TODO Auto-generated method stub return null;

return 0; } //动态生成每个下拉项对应的View,每个下拉项View由LinearLayout中包含一个 //ImageView,两个内嵌的LinearLayout构成,其中一个包含两个TestView,另一个中包含一个按钮 @Override public View getView(int arg0, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub LinearLayout ll = new LinearLayout(YingyonActivity.this); //初始化LinearLayout ll.setOrientation(LinearLayout.HORIZONTAL);//设置朝向 ImageView img = new ImageView(YingyonActivity.this);//初始化ImageView img.setImageDrawable(getResources().getDrawable(getResources() .getIdentifier(yimages[arg0], \"drawable\getPackageName()))); img.setLayoutParams(new Gallery.LayoutParams(49,50)); img.setPadding(5, 5, 5,5); ll.addView(img); //添加LinearLayout中 LinearLayout lll = new LinearLayout(YingyonActivity.this);//初始化LinearLayout lll.setOrientation(LinearLayout.VERTICAL);//设置朝向 lll.setLayoutParams(new LinearLayout.LayoutParams (LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

TextView tit = new TextView(YingyonActivity.this);//初始化TextView tit.setText(getResources().getText( getResources().getIdentifier(ytitles[arg0], \"string\getPackageName()))); //设置内容 tit.setLayoutParams(new LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT)); tit.setTextSize(18);//设置字体大小 tit.setTextColor(getResources().getColor(R.color.black));//设置字体颜色 lll.addView(tit); //添加到LinearLayout中 TextView inf = new TextView(YingyonActivity.this);//初始化TextView inf.setText(getResources().getText(getResources().getIdentifier(yinfos[arg0], \"string\ //设置内容 inf.setLayoutParams(new LayoutParams(LinearLayout .LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT)); inf.setTextSize(13); //设置字体的大小 inf.setTextColor(getResources().getColor(R.color.black));//设置字体颜色

lll.addView(inf); //添加到LinearLayout中 ll.addView(lll); //添加到LinearLayout中 LinearLayout ll2 = new LinearLayout(YingyonActivity.this); //初始化LinearLayout ll2.setOrientation(LinearLayout.HORIZONTAL);//设置朝向 ll2.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 0, 3, 0);//setPadding参数ll2.setPadding(3, (left,top,right,bottom) ll2.setGravity(Gravity.RIGHT); Button btn = new Button(YingyonActivity.this);//初始化Button btn.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); btn.setText(\"下载\"); btn.setId(arg0);//设置Button的Id btn.setFocusable(false);//*****不让按钮抢占焦点,当按钮点击的时候给它焦点 //设置按钮的监听器 btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {

// TODO Auto-generated method stub startActivity(new Intent(YingyonActivity.this,XiaZaiActivity.class)); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, }; lv.setAdapter(ba);//为LietView设置内容适配器 } } }); ll2.addView(btn);//将btn添加到ll2中 ll.addView(ll2);//将ll2添加到ll中 return ll; long arg3) { //重写选项被选中事件的处理方法 if (arg2==0){ Intent intent = new Intent(YingyonActivity.this,Yitem1Activity.class); } if (arg2==1){ startActivity(intent); finish();

Intent intent = new Intent(YingyonActivity.this,Yitem2Activity.class); } if (arg2==2){ Intent intent = new YingyonActivity.this.startActivity(intent); finish(); Intent(YingyonActivity.this,Yitem3Activity.class); } if (arg2==3){ Intent intent = new startActivity(intent); finish(); Intent(YingyonActivity.this,Yitem4Activity.class); } if (arg2==4){ Intent intent = new startActivity(intent); finish(); Intent(YingyonActivity.this,Yitem5Activity.class); } if (arg2==5){ Intent intent = new startActivity(intent); finish(); Intent(YingyonActivity.this,Yitem6Activity.class); } startActivity(intent); finish();

五、实验结果及分析 运行Eclipse结果如下图所示: 点击游戏的Item项跳转到应用的介绍页面,其中图片用Gallery实现,以及下载按钮 下载按钮设置为根据时间的判断,自行移动。

点击应用的Item项跳转到应用的介绍页面,其中图片用Gallery实现,以及下载按钮 下载按钮设置为根据时间的判断,自行移动。 六、心得体会: 通过本次的实验熟练的掌握了TabHost以及按钮的监听和Activity的跳转,掌握了ProgressBar,SeekBar,RatingBar等进度条的使用,额外又自己学会了Handler的使用,根据给定的时间去处理线程,在本次实验的作用是根据时间判断进度条的自行移动。 实验地点 行勉A306 指导教师 马垚

太原理工大学学生实验五报告

学院名称 学生姓名 课程名称 软件学院 张卫东 移动应用软件开发技术 专业班级 实验日期 实验题目 软件1319 2016.4.22 学号 成绩 2013005655 Android 菜单与对话框 一、实验目的 掌握Android中不同类型菜单和对话框控件的使用。 二、实验要求 1、掌握选择菜单(OptionMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)三种菜单的使用。 2、掌握提示对话框(AlertDialog)、进度对话框(ProgressDialog)、日期选择对话框(DatePickerDialog)和时间选择对话框(TimePickerDialog)四种对话框的使用。 三、实验原理及步骤 1、认真学习课本P177页示例。 2、根据以上示例,完成课本P188页的练习,即完成“掌上微博”中的相册管理模块,要求至少使用2个Activity,第一个Activity以列表的方式列出已有的相册标题,并使用选项菜单设置“新增”和“删除”菜单项,点击菜单项时显示相应的提示对话框;当点击相册列表中的某一项时,跳转到第二个Activity,在第二个Activity中联合使用ImageSwitcher和Gallery控件显示指定相册中的照片,并添加一个返回按钮可以返回到第一个Activity。 四、实验核心代码 package org.yanzi.testhorizontallistview; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import android.R.array; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface;

import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.TextUtils; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.Gallery; import android.widget.Gallery.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class ListViewBaseAdtActivity extends Activity { final int MENU_ADD = Menu.FIRST; final int MENU_DELETE = Menu.FIRST+1; private ArrayList>arrayList; //所有图片资源名(tb_baidu,tb_sina,tb_tencent,tb_netease)的数组 String[] images;

//所有标题资源名(baidu,sina,tencent,netease)的数组 String[] titles; //所有网址资源名(baiduurl,sinaurl,tencenturl,neteaseurl)的数组 String[] infos; private BaseAdapter ba; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listv_ba); images = getResources().getStringArray(R.array.images); titles = getResources().getStringArray(R.array.titles); infos = getResources().getStringArray(R.array.infos); arrayList = getImage(); ListView lv = (ListView) findViewById(R.id.ListView02);//初始化ListView ba = new BaseAdapter() { @Override public int getCount() { // TODO Auto-generated method stub return arrayList.size(); //返回数组的大小,即数组元素个数 //为ListView准备内容适配器 } @Override public Object getItem(int arg0) { } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub // TODO Auto-generated method stub return null;

return 0; } //动态生成每个下拉项对应的View,每个下拉项View由LinearLayout中包含一个 //ImageView,两个内嵌的LinearLayout构成,其中一个包含两个TestView,另一个中包含一个按钮 @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub HolderView holderView; if (convertView == null) { holderView = new HolderView(); convertView = View.inflate(ListViewBaseAdtActivity.this, R.layout.list_item, null); holderView.imageView = (ImageView) convertView.findViewById(R.id.image); holderView.tvTitle = (TextView) convertView.findViewById(R.id.tv_name); holderView.tvInfo = (TextView) convertView.findViewById(R.id.tv_sum); } else { } holderView = (HolderView) convertView.getTag(); convertView.setTag(holderView); holderView.imageView.setImageDrawable(getResources().getDrawable(getResources() .getIdentifier((String)

arrayList.get(position).get(\"images\"), \"drawable\ holderView.tvTitle.setText(arrayList.get(position).get(\"titles\").toString()); holderView.tvInfo.setText(arrayList.get(position).get(\"infos\").toString()); }; lv.setAdapter(ba);//为LietView设置内容适配器 lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, } return convertView; long arg3) { if (arg2==0){ Intent intent = new Intent(ListViewBaseAdtActivity.this,MainActivity.class); } if (arg2==1){ Intent intent = new startActivity(intent); Intent(ListViewBaseAdtActivity.this,MainActivity.class); } if (arg2==2){ Intent intent = new ListViewBaseAdtActivity.this.startActivity(intent); Intent(ListViewBaseAdtActivity.this,MainActivity.class); startActivity(intent);

} if (arg2==3){ Intent intent = new Intent(ListViewBaseAdtActivity.this,MainActivity.class); } if (arg2==4){ Intent intent = new startActivity(intent); Intent(ListViewBaseAdtActivity.this,MainActivity.class); } if (arg2==5){ Intent intent = new startActivity(intent); Intent(ListViewBaseAdtActivity.this,MainActivity.class); } if (arg2==6){ Intent intent = new startActivity(intent); Intent(ListViewBaseAdtActivity.this,MainActivity.class); } if (arg2==7){ Intent intent = new startActivity(intent); Intent(ListViewBaseAdtActivity.this,MainActivity.class); } if (arg2==8){ Intent intent = new startActivity(intent); Intent(ListViewBaseAdtActivity.this,MainActivity.class);

} startActivity(intent); if (arg2==9){ Intent intent = new Intent(ListViewBaseAdtActivity.this,MainActivity.class); startActivity(intent); } @Override public boolean onCreateOptionsMenu(Menu menu) { } @Override public boolean onOptionsItemSelected(MenuItem item) { } private void showPhotoDialog() { // TODO Auto-generated method stub // TODO Auto-generated method stub switch (item.getItemId()) { case MENU_ADD: showPhotoDialog(); break; menu.add(0, MENU_ADD,0,\"添加\"); menu.add(0, MENU_DELETE, 0, \"删除\"); return true; case MENU_DELETE: showDeleteDialog(); default: } return super.onOptionsItemSelected(item); break;

// 自定义对话框布局 final View view = View.inflate(ListViewBaseAdtActivity.this, R.layout.dialog_add, null); AlertDialog.Builder builder = new AlertDialog.Builder(ListViewBaseAdtActivity.this); builder.setView(view); builder.setTitle(\"新增相册\"); builder.setNegativeButton(\"取消\ @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub try { Field field = dialog.getClass().getSuperclass().getDeclaredField(\"mShowing\"); } field.setAccessible(true); field.set(dialog, true); dialog.dismiss(); } catch (Exception e) { } // TODO Auto-generated catch block e.printStackTrace(); }); builder.setPositiveButton(\"确定\ @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub EditText etName = (EditText) view.findViewById(R.id.et_name); String name = etName.getText().toString();

if (TextUtils.isEmpty(name)) { Animation shake = AnimationUtils.loadAnimation(ListViewBaseAdtActivity.this, R.anim.shake); etName.startAnimation(shake); Toast.makeText(ListViewBaseAdtActivity.this, \"请输入相册名\ try { Field field = dialog.getClass().getSuperclass().getDeclaredField(\"mShowing\"); field.setAccessible(true); field.set(dialog, false); dialog.dismiss(); } catch (Exception e) { } // TODO Auto-generated catch block e.printStackTrace(); } else { try { Field field = dialog.getClass().getSuperclass().getDeclaredField(\"mShowing\"); field.setAccessible(true); field.set(dialog, true); } catch (Exception e) { } HashMap map = new HashMap(); map.put(\"images\

map.put(\"titles\map.put(\"infos\arrayList.add(map); ba.notifyDataSetChanged(); Toast.makeText(ListViewBaseAdtActivity.this, \"添加成功\1).show(); } } } }); builder.show(); private void showDeleteDialog() { // TODO Auto-generated method stub // 自定义对话框布局 final View view = View.inflate(ListViewBaseAdtActivity.this, R.layout.dialog_delete, null); AlertDialog.Builder builder = new AlertDialog.Builder(ListViewBaseAdtActivity.this); builder.setView(view); builder.setTitle(\"删除相册\"); builder.setNegativeButton(\"取消\ @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub try { Field field = dialog.getClass().getSuperclass().getDeclaredField(\"mShowing\"); field.setAccessible(true); field.set(dialog, true);

} dialog.dismiss(); } catch (Exception e) { } // TODO Auto-generated catch block e.printStackTrace(); }); builder.setPositiveButton(\"确定\ @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub EditText etName = (EditText) view.findViewById(R.id.et_item); String name = etName.getText().toString(); if (TextUtils.isEmpty(name)) { Animation shake = AnimationUtils.loadAnimation(ListViewBaseAdtActivity.this, R.anim.shake); etName.startAnimation(shake); Toast.makeText(ListViewBaseAdtActivity.this, \"请输入要删除的相册\ try { Field field = dialog.getClass().getSuperclass().getDeclaredField(\"mShowing\"); field.setAccessible(true); field.set(dialog, false); dialog.dismiss(); } catch (Exception e) { } // TODO Auto-generated catch block e.printStackTrace();

} else { try { Field field = dialog.getClass().getSuperclass().getDeclaredField(\"mShowing\"); field.setAccessible(true); field.set(dialog, true); if (Integer.parseInt(name) >= 0 && Integer.parseInt(name) < arrayList.size()) { arrayList.remove(Integer.parseInt(name)); ba.notifyDataSetChanged(); Toast.makeText(ListViewBaseAdtActivity.this, \"删除成功\ } else { Toast.makeText(ListViewBaseAdtActivity.this, \"没有这个相册\ Field field1 = dialog.getClass().getSuperclass().getDeclaredField(\"mShowing\"); } } } field1.setAccessible(true); field1.set(dialog, false); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }); } builder.show();

public ArrayList> getImage() { ArrayList> arrayList = new ArrayList>(); } package org.yanzi.testhorizontallistview; import org.yanzi.ui.HorizontalListView; import org.yanzi.ui.HorizontalListViewAdapter; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.Window; import android.widget.AdapterView; } public class HolderView { } public ImageView imageView; public TextView tvTitle; public TextView tvInfo; for (int i = 0; i < images.length; i++) { } return arrayList; HashMap map = new HashMap(); map.put(\"images\map.put(\"titles\map.put(\"infos\arrayList.add(map);

import android.widget.AdapterView.OnItemClickListener; import android.widget.ImageView; public class MainActivity extends Activity { HorizontalListView hListView; HorizontalListViewAdapter hListViewAdapter; ImageView previewImg; View olderSelectView = null; @Override protected void onCreate(Bundle savedInstanceState) { } @Override public boolean onCreateOptionsMenu(Menu menu) { } public void initUI(){ hListView = (HorizontalListView)findViewById(R.id.horizon_listview); previewImg = (ImageView)findViewById(R.id.image_preview); String[] titles = {\"怀师\南怀瑾军校\闭关\南怀瑾\南公庄严// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUI(); 照\怀师法相\ final int[] ids = {R.drawable.nanhuaijin_miss, R.drawable.nanhuaijin_school, R.drawable.nanhuaijin_biguan, R.drawable.nanhuaijin, R.drawable.nanhuaijin_zhuangyan,

R.drawable.nanhuaijin_faxiang}; hListViewAdapter = new HorizontalListViewAdapter(getApplicationContext(),titles,ids); } } public void back (View v){ } finish(); hListView.setAdapter(hListViewAdapter); hListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, } int position, long id) { previewImg.setImageResource(ids[position]); hListViewAdapter.setSelectIndex(position); hListViewAdapter.notifyDataSetChanged(); }); 五、实验结果及分析 运行Eclipse后以及点击虚拟机上的menu键结果如下图所示:

点击添加按钮,同时添加相册以及出现添加成功的提示(Tost接口的调用)结果如下图所示: 点击删除按钮以及删除相册事件,会提示用户删除成功,结果如下图所示:

点击其中一个相册名,如:点击“自拍相册”条目,结果如下图所示:

六、心得体会: 本次的实验是仿照Smartisan T1相册的风格,通过本次的实验,对ImageSwitcher,以及Gallery已经熟练掌握,对两个Activity的跳转融会贯通,对Tost接口已经熟练掌握,ListView和BaseAdapter也掌握的很熟练。 实验地点 行勉A306 指导教师 马垚

因篇幅问题不能全部显示,请点此查看更多更全内容