要帶一個本科生做一部分跟安卓有點關系的項目,於是趁着機會學習一下編寫安卓程序。
第一篇材料來自谷歌官方,傳送門:https://developer.android.com/training/basics/firstapp/index.html。由於官方例程寫的很清楚了,基本上只要按着步驟就好了,所以不打算完全的復制粘貼,主要實踐過程中我的一些理解和思考。
1. 創建新工程
一個安卓程序的層次結構為 Application -> many activities (可以理解為很多個界面) -> layout + title + menu
新建工程后AS會自動生成許多文件,重要的文件包括:
1. app/src/main/res/layout/activity_my.xml 格式為XML的layout文件。AS支持直接通過text來修改顯示界面,同時也提供了GUI,可以直接拖拽完成界面編輯。
2. app/src/main/res/layout/content_my.xml 該文件被activity_my.xml調用。對layout的具體描述以及一些設置等。
3. app/src/main/java/com.mycompany.myfirstapp/MyActivity.java jave核心代碼,包括實際的activity的類及其類函數。當app運行時,該activity類運行並調用前述layout文件顯示出來。
4. app/src/main/AndroidManifest.xml app的基礎特性的配置及包括哪些組成部分(activity)
5. app/build.gradle gradle腳本用來編譯和構建app,方便處理版本及依賴庫等問題。
6. app/src/main/res/ 改目錄下包括app中所用到的所有資源:
drawable-<density>/ 包括所有圖片資源,除了啟動圖標
layout 包括每個activity的layout文件
menu 包括activity的menu文件
mipmap 包括啟動圖標
values 其他的xml文件,包括string和color的定義等。
2. 運行程序
程序既可以在具體的安卓設備上運行,也可以在模擬器上運行。
在具體的安卓設備調試之前,需要安裝好設備的相關驅動,編譯程序的時候要選擇符合的版本號,不用怎么麻煩就可以運行hello world了!
3. 創建簡單的用戶界面
安卓app的圖形界面的層次結構為 ViewGroup -> View. ViewGroup是不可見的容器,定義了其子view如何布局,布局是ViewGroup的子類。View對象是普通的UI部件。
1. 新建一個linear layout
2. 增加Text域和button
<EditText android:id="@+id/edit_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/edit_message" />
View的ID用來讀取和操作對應的View對象
View的hint為輸入Text為空的時候的提示語句
3. 增加String資源
在res/values/strings.xml中增加名為edit_message和button_send的string
4. 讓輸入框充滿屏幕
給UI部件增加響應函數
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" android:onClick="sendMessage" />
增加onClick響應,sendMessage為該activity的類函數
在MyActivity.javaMyActivity類中增加對應類函數,該類函數需要是Public的,Void的返回值以及只有View一個參數
在類函數中創建一個Intent用來打開新的activity
public void sendMessage(View view) { Intent intent = new Intent(this, DisplayMessageActivity.class); EditText editText = (EditText) findViewById(R.id.edit_message); String message = editText.getText().toString(); intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent); }
intent能夠攜帶類型為字典的變量extras,通過調用putExtra能夠給字典賦值
在MyActivity中補充定義Extra_MESSAGE
public class MyActivity extends AppCompatActivity { public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE"; ... }
4.創建另外一個Activity
使用 AS創建另外一個blank Activity,編輯其java核心代碼
接收intent
Intent intent = getIntent();
String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);
在Activity中創建新的textView
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message);
在Activity中在布局中添加textView
RelativeLayout layout = (RelativeLayout) findViewById(R.id.content);
layout.addView(textView);
恭喜,完成基本的教程!