Build Your First App
---by using Android Studio
此为笔者跟随Google官方文档学习Android 应用开发所编写的第一个App,详细代码可以参见My Github。此部分我仅仅归纳总结一下使用Android Studio的成果及收获。
新建一个项目-> 使用手机作为虚拟机 -> 试运行 -> 创建简单UI -> 添加TextView 和 button -> 添加按钮相应机制 -> 创建Intent -> 创建第二个Activity -> 完善Intent -> 运行App
在试运行时,正常状态下手机会显示的默认页面是Head 为 My First App, 页面文字为Hello World 的程序。
以下详解几个比较难的部分:
创建简单的UI
由于Android Studio 中很好地实现了java代码与图形用户界面的分离,因此我们在设计UI时可以不用考虑java代码的混合问题,只需要在设计好UI后通过Intent机制建立连接即可。
UI文件在AS中的后缀为.xml文件,因此我们首先进行activity_main.xml文件的编辑:(.xml文件的文件名不能出现大写字母,这些信息在创建时AS都会有提示)
设置基本布局
<LinearLayout 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:orientation="horizontal" >
</LinearLayout>
- 将默认的相对布局改为线性布局(原因暂时未知)
- 设置布局的方向为水平方向(原因暂时未知)
- 将布局的宽度和高度改为match_parent(原因之后细致分析)
创建Text Field
<EditText android:id="@+id/edit_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/edit_message" />
- android:id: 为该Text Field 设置一个unique id,方便进行传值以及调用
- layout_width/height: 选择wrap_content 表明的是文本框的大小由文字来决定
- hint: 这是当文本框内容为空时默认显示的内容。注意:此处的edit_message 不是文字的默认内容,而是相当于一个符号,给这个string赋值的内容才是真正的提示内容。
添加string source
string.xml 是管理所有UI的各种插件的字符名称的文件。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">My First App</string>
<string name="edit_message">Enter a message</string>
<string name="button_send">Send</string>
<string name="action_settings">Settings</string>
<string name="title_activity_main">MainActivity</string>
</resources>
由代码可以见到,app_name 这个符号给的内容是My First App,刚刚的文本框符号我们给的内容是Enter a message, 而接下来的button按钮的字符串符号我们设置为Send
添加按钮(button)
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send" />
与文本框相同,因此在此不进行赘述。
为了使页面看起来更加地美观,因此可以进行如下修改:
<EditText
android:layout_weight="1"
android:layout_width="0dp"
... />
详解layout_weight: layout_weight 的参数值 除以 (参数值+1)即为hint文字部分占整个文本框的比例。
(此处为何要将width设置成0dp呢,似乎不设置就视图而言没有多大影响)
以下是得到的内容:
创建第二个Activity
第二个Activity是输入文字,按下button按钮之后将文字呈现出来的界面。
首先是
按钮响应
我们为SEND按钮创建一个onClick()事件,onClick中的内容即为该事件的名称,代码如下:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />
在点击button_send这个按钮时,会触发sendMessage事件,因此我们要在my_activity.java中写入sendMessage()这个方法。
建立Intent
(Intent可以建立UI与java文件的连接,以及事件触发信息的传递)
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class);
}
该部分极为重要
- 为何此处要将view作为参数值(之后分析)
- 新建一个Intent,一个Context将作为第一个参数,此处使用this是因为Activity是Context的一个子类?
- DisplayMessageActivity 是一个类,也就是第二个Activity,在onClick事件被触发时会跳转至此UI界面
接下来我们要先得到文本框中的值,然后再传到DisplayMessageActivity即可。
首先得到文本框的id:
EditText editText = (EditText) findViewById(R.id.edit_message);
(注意:此时需要导入所需的相关包,在android studio 中只需要使用alt + enter 即可完成,下同)
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);
}
得到文本框之后,我们再通过第三行得到其字符串,然后调用intent的putExtra()方法,putExtra()方法的第一个参数是一个键值对,也就是该message的键值对名称,第二个参数是该键值对的参数值。
接着再在MainActivity中新建一个字符串,为该键值对添加一个独一无二的名称,一般的取法就是app包名.MESSAGE.
接着我们再启用intent:
/** Called when the user clicks the Send button */
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);
}
创建第二个Activity
创建完成后,Android Studio 会智能化地得到所需的内容,我们运行即可。
这就是我的第一个APP,以下是其完成展示:
(获取看上去还有些小问题,将进行后续改进)(如何修改图片大小?)