20155205 《Java程序设计》实验四 Android程序设计
一、实验内容及步骤
(一) Android Stuidio的安装测试
参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十四章:
- 安装 Android Stuidio
- 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号,提交代码运行截图和码云Git链接,截图没有学号要扣分
- 学习Android Stuidio调试应用程序
- 将布局文件activity_main.xml中的
android:text="Hello World!"
改为android:text="Hello World20155305!"
。
结果如下:
- 相关知识:Android Studio项目的目录树
1.build
:该目录包含了自动生成的文件,这些文件包括了编译设置项、R类等。
2.libs
:该目录包含了开发Android应用所需要的库文件。
3.src
:该目录存放了应用的源代码.java文件。默认情况下,它包含了MainActivity.java文件,这个源代码j有一部分是执行了你点击应用图标时启动应用所需要功能。
4.res
:该目录存放了所有的资源文件。
5.drawable
:该目录存放了项目的drawable对象和一些图片资源。
6.layout
:该目录存放了各个界面的布局文件。
7.menu
:该目录存放了应用中设计的菜单对象。
8.mipmap
:该目录存放了应用的主要图片资源。
9.values
:该目录存放了字符串、颜色等定义的资源集合。
10.AndroidManifest.xml
:该文件是描述应用基础特性的文件,定义了每个组件。
(二) Activity测试
参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十五章:
- 构建项目,运行教材相关代码
- 创建 ThirdActivity, 在ThirdActivity中显示自己的学号,修改代码让MainActivity启动ThirdActivity
- 提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分
- way1.按照教材的内容,修改MainActivity中的代码
@Override
public boolean onTouch(View arg0, MotionEvent event) {
Intent intent = new Intent(this, ThirdActivity.class);
intent.putExtra("message", "20155305郝博雅");
startActivity(intent);
return true;
}
- way2.在第一个实验中,直接在MainActivity中添加
setContentView(R.layout.activity_third);
也能达到调用另一个activity的效果。
结果如下:
- 相关知识
Android中有四大组件,分别是Activity、Service、ContentProvider和Broadcast Receiver。对于Activity,它是Android系统中最常用、最常见的一个组件。一个应用通常包含了多个Activity。
Activity类定义了如下的回调事件:
- onCreate():这是第一个回调方法。当Activity首次被创建时会调用它。
- onStart():当Activity对于用户来说变为可视状态时会回调此方法。
- onResume():当用户开始与应用交互时会调用此方法。
- onPause():当前的Activity正在暂停中,并且先前的Activity正在恢复时,被暂停的这个Activity不会再接收用户的输入,也不再执行任何代码和调用。
- onStop():当Activity不再为可视状态时会调用该回调方法。
- onDestroy():该方法会在Activity被系统销毁前被调用。
- onRestart():当Activity在被停止后重新启动时,会调用该回调方法。
(三) UI测试
参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十六章:
- 构建项目,运行教材相关代码
- 修改代码让Toast消息中显示自己的学号信息
- 提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分
代码如下:
package com.example.a1.toast;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v){
Toast toast = Toast.makeText(MainActivity.this,"20155205", Toast.LENGTH_LONG);
toast.show();
}
});
}
}
结果如下:
-
相关知识
Android提供了许多的UI组件,你能按需构建应用的用户交互界面。
这些控件主要有: - TextView:文本标签,该控件用于显示文本。 - EditText:文本框,是预定义好的TextView的一个子类,有富文本编辑能力。 - AutoCompleteTextView:自动完成的文本标签,类似于EditText。当用户在输入的时候会自动给出一些完整的建议。 - Button:按钮,可以按压、点击,由用户完成一个动作。 - ImageButton:图片按钮,顾名思义。 - CheckBox:复选框,可以作为用户使用的一个开关。当有一系列可供选择的选项时,建议使用该控件。 - ToggleButton:带有一个“灯泡”效果的开关按钮。 - RadioButton:单选按钮,只有选中和未选中状态。 - RadioGroup:是RadioButton的集合,在同组内只能选中一个单选按钮。 - Spinner:下拉列表,允许用户在多个选项中选择一个。 - TimePicker:时间选择器,能让用户输入时间,有12小时和24小时模式。 - DatePicker:日期选择器,能让用户输入日期。 - ProgressBar:进度条,为用户提供某项工作的进度,比如后台正在做的事情。
(四) 布局测试
参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十七章:
- 构建项目,运行教材相关代码
- 修改布局让P290页的界面与教材不同
- 提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分
结果如下:
-
相关知识
-
布局的类型
- 线性布局LinearLayout:线性布局是一个视图组(ViewGroup),能在水平或者垂直的单一方向上将所有子元素排成一行。
- 相对布局RelativeLayout:相对布局是一个将子视图显示在相对的位置上的布局。
- 表格布局TableLayout:表格布局是在行、列中组合子元素的视图。
- 绝对布局AbsoluteLayout:绝对布局能让你指定子元素的精确位置。
- 帧布局FrameLayout:帧布局是一个屏幕上的占位符,你可以用它来显示单一视图。
- 列表视图ListView:列表布局是可以滚动的,是用于显示子元素列表的视图组。
- 网格视图GridView:网格视图是在二维可滚动的网格中显示子元素的视图组。
-
-
参考RelativeLayout常用属性介绍来学习相对布局。
(五) 事件处理测试
参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十八章:
- 构建项目,运行教材相关代码
- 提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分
p298的代码如下:
int counter = 0;
int[] colors = { Color.BLACK, Color.BLUE, Color.CYAN,
Color.DKGRAY, Color.GRAY, Color.GREEN, Color.LTGRAY,
Color.MAGENTA, Color.RED, Color.WHITE, Color.YELLOW };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
public void changeColor(View view) {
if (counter == colors.length) {
counter = 0;
}
view.setBackgroundColor(colors[counter++]);
}
当用户按下(或触碰)时钟的时候,会调用该方法并接受时钟对象。要修改时钟的颜色,需要调用其setBackgroundColor方法,传入一个颜色对象,从而实现触碰时钟改变颜色。
结果如下:
二、分析与总结
(一)遇到的问题及解决方案
-
问题1:写程序时出现了R变成红色,丢失的情况。
-
问题1解决方案:参考R丢失。
(二)PSP
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 5min | 5% |
设计 | 10min | 10% |
代码实现 | 50min | 50% |
测试 | 15min | 15% |
分析总结 | 20min | 20% |