本项目需求为:
做一个简单android应用,包含2个activity,第一个activity展示一个可输入的文本框和一个按钮(点击按钮进入下一个activity),第二个activity展示从第一个文本框输入的内容。
----------------------------------------------------------------------------------------------------------------------------------------------------------
一、Whhhat is Activity?
Activity是android四大组件之一,所有控件都在activity中运行,每个activity之间的通信通过Intent实现。
对于一个android程序:
App中一个屏幕的抽象:Activity
屏幕之间的跳转:Intent
构成屏幕展示的视图组件:显示图片的ImageView,显示文字的TextView,把组件组成一个列表的视图ListView。
通过事件来处理用户的交互:OnClickListener
android工程中非常重要的一个配置文件app/src/main/AndroidManifest.xml:描述Android应用的基本信息,并定义了应用中的各个组件(Activity是一种组件)。
app/src/main/res目录下包含了应用所需要的资源文件:
drawable<density>/ - 图片资源文件
layout/ - 用户界面布局描述文件
menu/ - 应用的菜单布局
values/ 常量值例如字符串、颜色数值等
strings/ 国际化数据
二、组件
本项目很简单,涉及组件只有EditText、Button以及TextView三个组件,下面罗列其较为重要的几个属性:
1.文本输入框EditText:
android:id:View的唯一标识符
android:layout_width 和android:layout_height:对于宽和高不建议指定具体的大小,使用wrap_content指定之后,这个视图将只占据内容大小的空间。如果使用了match_parent,这时EditText将会布满整个屏幕,因为它将适应父布局的大小。
android:hint:当文本框为空的时候,会默认显示这个字符串。对于字符串@string/edit的值所引用的资源应该是定义在单独的文件里,而不是直接使用字符串。
因为使用的值是存在的资源,所以不需要使用+号。然而,由于还没有定义字符串的值,所以在添加@string/edit时候会出现编译错误。下边可以定义字符串资源值来去除这个错误。
(Note: 该字符串资源与id使用了相同的名称(edit)。然而,对于资源的引用是区分类型的(比如id和字符串),因此,使用相同的名称不会引起冲突。)
在/res/values/string.xml下定义:<string name="edit">Please Enter Your Text</string>。
2.按钮Button:
android:layout_gravity 和 android:gravity 的区别从名字上可以看到,android:gravity是对元素本身说的,元素本身的
文本显示在什么地方靠着换个属性设置,不过不设置默认是在左侧的。
android:layout_gravity是相对与它的父元素说的,说明元素显示在父元素的什么位置。
比如说button:android:layout_gravity 表示按钮在界面上的位置。
android:gravity表示button上的字在button上的位置。
这两个属性可选的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、
center、fill、clip_vertical。而且这些属性是可以多选的,用“|”分开。
3.文本展示框TextView:
//设置显示文本
android:text="我爱Java"
//设置文本颜色
android:textColor="#f00"
//设置文本大小
android:textSize="20pt"
//不管内容多长,单行显示
android:singleLine="true"
//文字过长时,中间部分省略
android:ellipsize="middle"
//全部字母大写
android:textAllCaps="true"
Activity的跳转通过Intent实现,Intent几个重要的方法:
intent.setClass(ActivityA.this, ActivityB.class):从ActivityA跳转到ActivityB
intent.putExtra("键","值"):以键值对的形式附加数据
startActivity(intent):携带附加数据跳转到ActivityB
getIntent():捕获到intent
intent.getExtras():获取intent对象中的附加数据
本Demo部分代码:
MainActivity:
//onCreate方法用来初始化Activity实例对象
@Override
protected void onCreate(Bundle savedInstanceState) {
//super.onCreate(savedInstanceState)的作用是调用其父类
//Activity的onCreate方法来实现对界面的图画绘制工作
super.onCreate(savedInstanceState);
//setContentView(R.layout.main)的作用是加载一个界面
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.btn);
button.setOnClickListener(listener);
editText = (EditText)findViewById(R.id.edit);
}
onClick监听事件: private View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
//从MainActivity跳转到另DetailActivity
intent.setClass(MainActivity.this, DetailActivity.class);
//将MainActivity.EditText的内容put到intent中
intent.putExtra("str",editText.getText().toString());
//intent传递给DetailActivity
startActivity(intent);
}
};
DetailActivity:public class DetailActivity extends AppCompatActivity {
private TextView textView = null;
//DetailActivity初始化
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
//接收intent对象,通过key值获取value
String text = this.getIntent().getExtras().getString("text");
textView = (TextView) findViewById(R.id.txv);
textView.setText(text);
}
}