# 20165318 2017-2018-2 《Java程序設計》第四周學習總結
2017-2018-2 20165318 實驗四《Android程序設計》實驗報告
一、實驗報告封面
課程:Java程序設計 班級:1653班 姓名:孫曉暄 學號:20165318
指導教師:婁嘉鵬 實驗日期:2018年5月14日
實驗時間:13:45 - 3:25 實驗序號:實驗四
實驗名稱:Android程序設計
實驗要求:
- 沒有Linux基礎的同學建議先學習《Linux基礎入門(新版)》《Vim編輯器》 課程
- 完成實驗、撰寫實驗報告,實驗報告以博客方式發表在博客園,註意實驗報告重點是運行結果,遇到的問題(工具查找,安裝,使用,程序的編輯,調試,運行等)、解決辦法(空洞的方法如“查網絡”、“問同學”、“看書”等一律得0分)以及分析(從中可以得到什麽啟示,有什麽收獲,教訓等)。報告可以參考範飛龍老師的指導
- 嚴禁抄襲,有該行為者實驗成績歸零,並附加其他懲罰措施。
二、實驗內容及步驟
目錄
- 第24章:初識Android
- 任務一:Android Stuidio的安裝測試
- 第25章:活動
- 任務二:Activity測試
- 第26章:UI組件
- 任務三:UI測試
- 第27章:布局
- 任務四:布局測試
- 第28章:監聽器
- 任務五:事件處理測試
- 實驗過程中遇到的問題及解決方法
- 實驗體會與總結
- 代碼托管
- PSP需求分析
- 參考資料
第24章:初識Android
build:該目錄包含了自動生成的文件,這些文件包括了編譯設置項、R類等
libs:該目錄包含了開發Android應用所需要的庫文件
src:該目錄存放了應用的源代碼.java文件。默認情況下,它包含了MainActivity.java文件,這個源代碼j有一部分是執行了你點擊應用圖標時啟動應用所需要功能
res:該目錄存放了所有的資源文件
drawable:該目錄存放了項目的drawable對象和一些圖片資源
layout:該目錄存放了各個界面的布局文件
menu:該目錄存放了應用中設計的菜單對象
mipmap:該目錄存放了應用的主要圖片資源
values:該目錄存放了字符串、顏色等定義的資源集合
AndroidManifest.xml:該文件是描述應用基礎特性的文件,定義了每個組件。
Android Studio項目的目錄樹
返回目錄
任務一 Android Stuidio的安裝測試:
任務要求
- 參考Android開發簡易教程,安裝 Android Stuidio。
- 完成Hello World, 要求修改res目錄中的內容,Hello World後要顯示自己的學號,自己學號前後一名同學的學號。
- 學習Android Stuidio調試應用程序。
實驗過程
- 將布局文件
activity_main.xml
中text
的android:text="Hello World!"
改為android:text="Hello World! 20165318 20165317 20165319"
也可將布局文件
activity_main.xml
中design
的text view
內容改為Hello World! 20165318 20165317 20165319
學習Android Stuidio調試應用程序
調試過程如下:Tools
->Android
->Android Device Monitor
運行結果
返回目錄
第25章:活動
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在被停止後重新啟動時,會調用該回調方法
返回目錄
任務二:Activity測試
任務要求
- 構建項目,運行教材相關代碼
- 創建 ThirdActivity, 在ThirdActivity中顯示自己的學號,修改代碼讓MainActivity啟動ThirdActivity
實驗過程
- 配置Activity
- 在文件AndroidManifest.xml中,只要為application元素添加activity子元素,即可配置Activity
- 在這個任務中,我們需要調用ThirdActivity,所以在AndroidManifest.xml中再添加一個activity即可
- 啟動、關閉Activity
- 每一個控制文件的Activity都需要有對應的啟動程序文件(.java)和相應的布局文件(.xml)
- 在這個任務中,要求讓MainActivity啟動ThirdActivity,所以還需要修改MainActivity
MainActivity代碼
package cn.edu.besti.is.sxx.activitydemo;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
import android.widget.Button;
import android.widget.Toast;
import android.graphics.Color;
import android.widget.AnalogClock;
public class MainActivity extends Activity implements OnTouchListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setOnTouchListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it
// is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onTouch(View arg0, MotionEvent event) {
Intent intent = new Intent(this, ThirdActivity.class);
intent.putExtra("message", "20165318孫曉暄");
startActivity(intent);
return true;
}
}
運行截圖
返回目錄
第26章:UI組件
- Android提供了許多的UI組件,你能按需構建應用的用戶交互界面
TextView
:文本標簽,該控件用於顯示文本EditText
:文本框,是預定義好的TextView的一個子類,有富文本編輯能力AutoCompleteTextView
:自動完成的文本標簽,類似於EditText。當用戶在輸入的時候會自動給出一些完整的建議Button
:按鈕,可以按壓、點擊,由用戶完成一個動作ImageButton
:圖片按鈕,顧名思義CheckBox
:復選框,可以作為用戶使用的一個開關。當有一系列可供選擇的選項時,建議使用該控件ToggleButton
:帶有一個“燈泡”效果的開關按鈕RadioButton
:單選按鈕,只有選中和未選中狀態RadioGroup
:是RadioButton的集合,在同組內只能選中一個單選按鈕Spinner
:下拉列表,允許用戶在多個選項中選擇一個TimePicker
:時間選擇器,能讓用戶輸入時間,有12小時和24小時模式DatePicker
:日期選擇器,能讓用戶輸入日期ProgressBar
:進度條,為用戶提供某項工作的進度,比如後臺正在做的事情
返回目錄
任務三:UI測試
任務要求
- 構建項目,運行教材相關代碼
- 修改代碼讓Toast消息中顯示自己的學號信息
MainActivity.java
package cn.edu.besti.is.sxx.basiccomponents;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.util.AttributeSet;
import android.view.Menu;
import android.view.MenuItem;
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 btnshow1=(Button) findViewById(R.id.btn1);
btnshow1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v){
Toast toast = Toast.makeText(MainActivity.this,"20165318孫曉暄", Toast.LENGTH_LONG);
toast.show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it
// is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
運行截圖
返回目錄
第27章:布局
布局的類型
- 線性布局
LinearLayout
:線性布局是一個視圖組(ViewGroup),能在水平或者垂直的單一方向上將所有子元素排成一行 - 相對布局
RelativeLayout
:相對布局是一個將子視圖顯示在相對的位置上的布局 - 表格布局
TableLayout
:表格布局是在行、列中組合子元素的視圖 - 絕對布局
AbsoluteLayout
:絕對布局能讓你指定子元素的精確位置 - 幀布局
FrameLayout
:幀布局是一個屏幕上的占位符,你可以用它來顯示單一視圖 - 列表視圖
ListView
:列表布局是可以滾動的,是用於顯示子元素列表的視圖組 - 網格視圖
GridView
:網格視圖是在二維可滾動的網格中顯示子元素的視圖組
返回目錄
任務四 布局測試
任務要求
- 構建項目,運行教材相關代碼
- 修改布局讓P290頁的界面與教材不同
實驗代碼
activity_main.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="2dp"
android:paddingRight="2dp">
<Button
android:id="@+id/cancelButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="20165318"
android:layout_marginTop="70dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/saveButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="孫曉暄"
android:layout_below="@+id/cancelButton"
android:layout_alignLeft="@+id/cancelButton"
android:layout_alignStart="@+id/cancelButton"
android:layout_marginTop="23dp" />
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_marginTop="45dp"
android:padding="4dp"
android:src="@android:drawable/presence_audio_away"
android:id="@+id/imageView"
android:layout_below="@+id/saveButton"
android:background="@android:color/white"
android:layout_centerHorizontal="true" />
<LinearLayout
android:id="@+id/filter_button_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center|bottom"
android:background="@android:color/holo_blue_dark"
android:orientation="horizontal" >
<Button
android:id="@+id/filterButton"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="Open" />
<Button
android:id="@+id/shareButton"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="Share" />
<Button
android:id="@+id/deleteButton"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="Delete" />
</LinearLayout>
</RelativeLayout>
運行截圖
返回目錄
第28章:監聽器
- Android是基於事件的。使用活動中的一個視圖進行的用戶交互,可能會觸發一個事件,包括點擊、長按、觸碰和按鍵等等。
- 要讓程序響應某一個事件,需要為該事件編寫一個監聽器。也就是要實現嵌入在android.view.View類中的一個接口。比如OnClickListener接口的onClick()方法。
返回目錄
任務五:事件處理測試
任務要求
運行教材本章相關代碼並截圖
實驗代碼
我在教材代碼的基礎上做了部分修改,使其能夠顯示我的學號
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<AnalogClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="90dp"
android:id="@+id/analogClock1"
android:onClick="changeColor" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="20165318孫曉暄"
android:layout_marginLeft="70dp"
android:layout_marginTop="300dp"
android:textSize="38dp"
android:textColor="#bbbb00"/>
</RelativeLayout>
運行截圖
返回目錄
實驗過程中遇到的問題及解決方法
返回目錄
實驗心得與體會
返回目錄
代碼托管
碼雲鏈接
返回目錄
PSP
返回目錄
參考資料
Android開發簡易教程
返回目錄
# 20165318 2017-2018-2 《Java程序設計》第四周學習總結