右键layout目录new->Android XML File,取名为plus.xml,先使用最简单的线性布局(LinearLayout)
然后加法需要2个输入的框框和一个提交按钮。
android:layout_width="match_parent" //布局的宽度,match_parent表示充满它的父控件,另外还有fill_parent和wrap_content(根据其内容改变宽度)
android:layout_height="match_parent"
android:orientation="vertical">//布局的方向,vertical:其内的控件垂直布局,horizontal:水平布局
android:id="@+id/num1"//@+id/ + id的格式是给控件指定一个id,这个id会在R.java自动生成,这样就可以在代码里按id找到这个控件了。
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"//设置Edittext的宽度为10个字符的宽度
android:inputType="number">// 文本框输入的类型,这里选择number就只能输入数字了,其他还有好多类型,可以察看文档
//设置一个画面初始的焦点,一个文件只能有一个这个标签
/*原文档Any element representing aobject can include this empty element,which gives it's parent initial focus on the screen. You can have only one of these elements per file.*/
android:id="@+id/num2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number">
android:id="@+id/bPlus"//指定按钮的id
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"//gravity是重力的意思,这里就是对齐位置,layout_gravity是本控件相对父控件的对齐方式
android:gravity="center"//这是本控件内容相对控件的对齐方式
android:text="@string/plus"//这是控件的显示内容,可以直接写字符串如:android:text="相加"
//也可以想这么写@string/plus,说明是引用了string.xml里name为plus的常量,推荐这么写,方便维护
/>
fill_parent,match_parent,wrap_content三者区别可以看这里。
下面看一下string.xml
Plus
相加//上面的Button引用后显示的就是相加
结果
这里的值也会在R.java中生成相应的id,所以也可以在代码中直接按R.string.+ name引用到。
这样一个布局文件就写好了呢。
然后还要建一个result.xml的布局文件,这个文件非常简单,就是显示相加的结果。
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:id="@+id/tvResult"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textIsSelectable="true"
android:textSize="50sp"
android:textColor="#FF0000"
android:gravity="center_vertical|center_horizontal"//这样写说明内容水平方向居中和垂直方向也居中
/>
唉,放了一个很大的错误,xml的注释不是这样的,我是在这里写的,习惯了代码的注释
下面就写第一个PlusActivity.java
packagelearn.plus;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.EditText;
publicclassPlusActivityextendsActivity {
// 定义2个EditText和一个Button控件
privateEditText text1, text2;
privateButton bPlus;
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置这个Activity的布局,直接使用R.layout.plus就可以设置了
setContentView(R.layout.plus);
// findViewById(id)这个id就是我们在布局文件里控件的id,然后需要强转成EditText
// 这样就可以去到3个控件的对象了
text1 = (EditText) findViewById(R.id.num1);
text2 = (EditText) findViewById(R.id.num2);
bPlus = (Button) findViewById(R.id.bPlus);
/*
* 这是给按钮设置监听onclick事件,和html中οnclick=“function()”类似
* BPlusClick()是一个内部类需要实现OnClickListener接口中的onClick(View v)方法。
* 不过也可以不定义这个内部类,可以采用匿名内部类的方式 bPlus.setOnClickListener(new
* OnClickListener() {
*
* @Override public void onClick(View v) {
*
* //do something
*
* } }); 这样写也是ok
* 这样就点击按钮的时候就会执行onClick方法了
*/
bPlus.setOnClickListener(newBPlusClick());
}
classBPlusClickimplementsOnClickListener {
@Override
publicvoidonClick(View v) {
/*
* new 一个Intent对象 源文档:An intent is an abstract description of an
* operation to be performed
* Intent就像是一个装满数据的卡车,从一个地方运到另一个地方,这些地方可以是Activity,service或者其他程序等等。
*/
Intent toResult = newIntent();
// 取得2个文本的值,相当于javascript中的document.getElementById('id').value
String str1 = text1.getText().toString();
String str2 = text2.getText().toString();
if((!"".equals(str1)) && (!"".equals(str2))) {
// Intent的方法,现在把它理解成是一个Map就好了,Map.put(key,value);
toResult.putExtra("num1", str1);
toResult.putExtra("num2", str2);
// 然后将2个Activity关联起来,PlusActivity.this表示当前Activity对象,和ResultActivity.class参数
toResult.setClass(PlusActivity.this, ResultActivity.class);
// 最后使用当前Activity对象的startActivity(Intent
// intent)方法打开ResultActivity
PlusActivity.this.startActivity(toResult);
}
}
}
}
感觉挺清晰了呢。
下面是ResultActivity.java
packagelearn.plus;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.widget.TextView;
publicclassResultActivityextendsActivity {
// 定义一个TextView
privateTextView tv;
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置布局
setContentView(R.layout.result);
// getIntent()得到传过来的Intent对象
Intent fromPlusIntent = getIntent();
tv = (TextView) findViewById(R.id.tvResult);
// 根据key得到其中的value
String num1Str = fromPlusIntent.getStringExtra("num1");
String num2Str = fromPlusIntent.getStringExtra("num2");
String resultStr = "error";
try{
// parseInt出错的话就直接显示error
intnum1 = Integer.parseInt(num1Str);
intnum2 = Integer.parseInt(num2Str);
resultStr = num1 + num2 + "";
} catch(Exception e) {
} finally{
tv.setText(resultStr);
}
}
}
还有最重要的一步,就是要在AndroidManifest.xml中配置这2个Activity,要使用到Activity都需要在这个xml中配置过。
package="learn.plus"
android:versionCode="1"
android:versionName="1.0">
android:minSdkVersion="11"
android:targetSdkVersion="17"/>
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
android:name="learn.plus.PlusActivity"
android:label="@string/app_name">
android:name="learn.plus.ResultActivity"
android:label="@string/result">
好了运行一下吧。
困死了睡觉