2017-2018-2 20165318 實驗四《Android程序設計》實驗報告
一、實驗報告封面
課程:Java程序設計 班級:1653班 姓名:孫曉暄 學號:20165318
指導教師:婁嘉鵬 實驗日期:2018年5月14日
實驗時間:13:45 - 3:25 實驗序號:實驗四
實驗名稱:Android程序設計
實驗要求:
- 沒有Linux基礎的同學建議先學習《Linux基礎入門(新版)》《Vim編輯器》 課程
- 完成實驗、撰寫實驗報告,實驗報告以博客方式發表在博客園,注意實驗報告重點是運行結果,遇到的問題(工具查找,安裝,使用,程序的編輯,調試,運行等)、解決辦法(空洞的方法如“查網絡”、“問同學”、“看書”等一律得0分)以及分析(從中可以得到什么啟示,有什么收獲,教訓等)。報告可以參考范飛龍老師的指導
- 嚴禁抄襲,有該行為者實驗成績歸零,並附加其他懲罰措施。
二、實驗內容及步驟
目錄
第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>
運行截圖
實驗過程中遇到的問題及解決方法
- 問題一:在安裝成功Android Studio,新建項目后,出現以下問題
-
解決過程:嘗試根據提示
try again
,經過漫長的創建過程,終於成功了。 -
問題二:第一次運行項目是,出現以下問題:
-
解決過程:通過查閱android studio中 R文件丟失可能的產生原因 以及解決方案
-
問題三:啟動手機時出現以下問題:
具體解決步驟如下:
- clean project:Build->Clean Project
- rebuild project:Build->Rebuild Project
- 立即重啟應用系統:File->Invalidata Caches/Restart->Invalidata and Restart
- 解決過程:這是由於環境還沒有建好,等項目全部運行完畢,這個窗口及會自動消失,手機能夠正常運行。
實驗心得與體會
這次實驗的內容Android開發是之前都沒有接觸過的領域,從軟件安裝到學習資料再到完成實驗,這個過程中遇到了很多問題,在這個過程中,我參考了學長學姐們的博客,並根據她們的總結,解決了很多問題。
總而言之,通過這次實驗,我初步掌握Android開發的一些基本知識,並能夠運行虛擬手機,在自己調試代碼的過程,對Android開發基本功能的運用了解的更深入。通過各種設置,最后在虛擬手機上得到展現,這使我對其的興趣更加深厚,達到了做中學的目的。
代碼托管
PSP
步驟 | 耗時 | 百分比 |
---|---|---|
需求分析 | 50min | 20% |
設計 | 20min | 8% |
代碼實現 | 100min | 42% |
測試 | 20min | 8% |
分析總結 | 50min | 22% |
參考資料
Android開發簡易教程
20155303 實驗四 Android程序設計
20155205 《Java程序設計》實驗四 Android程序設計
返回目錄