一、提要
看来Android开发并没有我想象的那么简单,至少比Qt会费劲一些。
今天我们要做的就是在上一篇的基础上完成一个更为复杂的Helloworld,设设计到的知识点有:
Activity的概念,Button的使用,创建按钮监听,intent的使用,Menu的使用。
我们最终要实现的是效果如下:
二、Activity
一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号、拍照、发送email、看地图。每一个activity被给予一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。
一个应用程序通常由多个activities组成,他们通常是松耦合关系。通常,一个应用程序中的activity被指定为"main"activity,当第一次启动应用程序的时候呈现给用户的那个activity。每一个activity然后可以启动另一个activity为了完成不同的动作。每一次一个activity启动,前一个activity就停止了,但是系统保留activity在一个栈上(“back stack”)。当一个新activity启动,它被推送到栈顶,取得用户焦点。Back Stack符合简单“后进先出”原则,所以,当用户完成当前activity然后点击back按钮,它被弹出栈(并且被摧毁),然后之前的activity恢复。
当一个activity因新的activity启动而停止,它被通知这种状态转变通过activity的生命周期回调函数。有许多回调函数一个activity可能会收到,源于它自己的状态变化-无论系统创建它、停止它、恢复它、摧毁它-并且每个回调提供你完成适合这个状态的指定工作的机会。例如,当停止的时候,你的activity应该释放任何大的对象,例如网络数据库连接。当activity恢复,你可以重新获得必要的资源和恢复被中断的动作。这些状态转换都是activity的生命周期的部分。
创建Activity的要点
1.一个Activity就是一个类,并且这个类要继承Activity;
2.需要复写onCreate方法;
3.每一个Activity都需要在AndroidManifest.xml文件中进行配置;
4.为每一个Activity添加必要的控件,Activity可以看作一个控件的容器;
三、intent
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。
因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
四、代码清单
//MainActivity.java
package com.example.activity_01; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.view.View.OnClickListener; public class MainActivity extends Activity { private EditText myTextEdit; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView myTextView=(TextView)findViewById(R.id.myTextView); myTextEdit=(EditText)findViewById(R.id.myEditText); Button myButton=(Button)findViewById(R.id.myButton); System.out.println("Begin"); myTextView.setText("Input your name!"); myButton.setText("confirm"); myButton.setOnClickListener(new ButtonListener()); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0,1,1,R.string.exit); menu.add(0,2,2,R.string.about); // getMenuInflater().inflate(R.menu.activity_main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { // TODO Auto-generated method stub if(item.getItemId()==1) finish(); if(item.getItemId()==2) new AlertDialog.Builder(this) .setTitle("About") .setMessage("Powerd By Empty.") .show(); return super.onMenuItemSelected(featureId, item); } class ButtonListener implements OnClickListener{ @Override public void onClick(View view0) { // TODO Auto-generated method stub String val=myTextEdit.getText().toString(); //生成一个Intent对象 Intent intent=new Intent(); //设置传递的参数 intent.putExtra("val", val); //从Activity IntentTest跳转到Activity IntentTest01 intent.setClass(MainActivity.this,SecondActivity.class); //启动intent的Activity MainActivity.this.startActivity(intent); System.out.println("ClickMe"); } } }
SecondActivity.java
package com.example.activity_01; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; public class SecondActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); Intent intent=getIntent(); String value=intent.getStringExtra("val"); TextView et=(TextView)findViewById(R.id.textView1); et.setText("Hello,"+value); } }
avtivity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/myTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/myEditText" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/myButton" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
sencond_layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" > </TextView> </LinearLayout>
别忘了在manifest里面将Activity注册,不然会报错。
<activity android:name="SecondActivity" android:label="@string/app_name" android:screenOrientation="landscape" android:windowSoftInputMode="adjustPan"> </activity>
Android developers:http://developer.android.com/training/basics/firstapp/running-app.html google的官方教程,非常推荐。
雷一的博客:http://www.cnblogs.com/rayee/tag/Android/ 素然只有四篇,但作为入门教程还是很不错的。