day06
1    如何创建一个新的Activity
    
    
    
    [1]Android的四大组件都要在清单文件里面配置
    [2]如果你想让你的应用有多个启动图标,你的Activity需要配置 如下
<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
    [3]Activity下的lable和icon属性可以和Application节点的属性不一样    默认用Application节点下的属性
    [4]一个Android应用一般配置一个启动图片就可以 看见的其他页面都是从第一个页面跳转过去的
2    隐式意图
    定义:通过制定一组动作或者数据
// [1]创建意图对象 意图就是我要完成一件事Intent intent = new Intent();// [2]设置跳转的动作intent.setAction("com.phone.testactivity");// [3]设置categoryintent.addCategory("android.intent.category.DEFAULT");// [4]设置数据类型// intent.setType("aa/bb");// [5]设置数据// intent.setData(Uri.parse("phone:" + 110));// [6]注意小细节☆如果setdata方法和settype方法一起使用的时候 应该使用下面这个方法intent.setDataAndType(Uri.parse("phone:" + 110), "aa/bb");// [7]开启Activity 记得加权限startActivity(intent);
3    显示意图
    定义:通过指定具体的包名和类名
// [1]创建意图对象 意图就是我要完成一件事Intent intent = new Intent(this, Test3Activity.class);// [2]设置包名和类名// intent.setClassName("com.phone.newacitivity",// "com.phone.newacitivity.Test3Activity");// [4]开启Activity 记得加权限startActivity(intent);
    总结:[1]开启自己应用的界面用显示意图
              [2]开启其他应用(系统应用)的时候用隐士意图
              [3]显示意图安全一些
4    人品计算器小案例
package com.phone.rpcalc;import android.content.Intent;import android.os.Bundle;import android.app.Activity;import android.text.TextUtils;import android.view.View;import android.widget.EditText;import android.widget.RadioGroup;import android.widget.Toast;public class MainActivity extends Activity {private EditText et_name;private RadioGroup rg_group;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_name = (EditText) findViewById(R.id.et_name);rg_group = (RadioGroup) findViewById(R.id.radioGroup1);}// 点击按钮 实现计算人品 跳转到ResultActivity页面public void click(View v) {// [1]获取用户名String name = et_name.getText().toString().trim();// [2]判断一下name是否为空if (TextUtils.isEmpty(name)) {Toast.makeText(getApplicationContext(), "亲,请输入姓名", 1).show();return;}// [3]判断用户选择的性别int radioButtonId = rg_group.getCheckedRadioButtonId();int sex = 0;switch (radioButtonId) {// 代表选择的是男case R.id.rb_male:sex = 1;break;// 代表选择的是女case R.id.rb_female:sex = 2;break;// 代表选择的是人妖case R.id.rb_other:sex = 3;break;}if(sex == 0){Toast.makeText(getApplicationContext(), "请选择性别", 1).show();return;}//[4]跳转到ResultActivity页面 用显示意图 跳转Intent intent = new Intent(this,ResultActivity.class);//传递姓名intent.putExtra("name", name );//传递性别intent.putExtra("sex", sex);startActivity(intent);}}
package com.phone.rpcalc;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;import android.widget.Toast;public class ResultActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);// [1]加载布局setContentView(R.layout.activity_result);TextView tv_name = (TextView) findViewById(R.id.tv_name);TextView tv_sex = (TextView) findViewById(R.id.tv_sex);TextView tv_result = (TextView) findViewById(R.id.tv_result);// [2]获取mainActivity传递过来的数据// 获取开启此Activity的意图对象Intent intent = getIntent();// [3]获取name和sex的值// 小技巧:传递的是什么数据类型 这边就按照传递的数据类型取String name = intent.getStringExtra("name");int sex = intent.getIntExtra("sex", 0);// [4]根据name和sex显示数据tv_name.setText(name);byte[] bytes = null;// [5]显示性别try {switch (sex) {case 1:tv_sex.setText("男");bytes = name.getBytes("gbk");break;case 2:tv_sex.setText("女");bytes = name.getBytes("utf-8");break;case 3:tv_sex.setText("人妖");bytes = name.getBytes("iso-8859-1");break;default:break;}} catch (Exception e) {e.printStackTrace();}// [6]计算人品结果 市面上大多数应用采用的是随机数int total = 0;for (byte b : bytes) {int number = b & 0xff;total += number;}// 获取得分int score = Math.abs(total) % 100;if (score > 90) {tv_result.setText("您的人品非常好,您家的祖坟都冒青烟啦");} else if (score > 80) {tv_result.setText("您的人品还可以");} else if (score > 60) {tv_result.setText("您的人品刚好及格");} else {tv_result.setText("您的人品太次了,您需要努力呀");}}}
5    短信大全小案例
String objects[] = {"今天的风儿轻柔无比,今天的花儿香飘万里;今天的鸟儿十分欢喜,今天的云儿满载笑意;今天的事儿万分顺利,今天的人儿如此甜蜜。所有美...","丫头,生活是你自己的,你哭它就对你哭,你笑它就对你笑。转眼,又是一年,你的生日即将来到。今年,还是少不了我对你的祝福,我忍不住...","世界上最动听的声音,是妈妈声声的呼唤;世界上最温暖的笑容,是妈妈温暖的笑脸。妈妈,原谅生日时我不能陪在您身边,在这个日子里,我...","今天是你的生日,祝你:发财势头如快马加鞭,一日千里;发展速度如滔滔江水,势不可挡;好事发生如雨后春笋,络绎不绝;祝福发送如比赛...","茫茫人海相逢是缘分,芸芸众生相知是福气,年年月月相交是情谊。高山流水知音难求,你我手足兄弟情深。巴山夜雨,飘洒我的思念。剪烛西..."};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//[1]找到控件ListView lv = (ListView) findViewById(R.id.lv);//[2]设置数据 先有数据ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item,objects);//[3]设置数据适配器lv.setAdapter(adapter);//[4]给listview设置点击事件lv.setOnItemClickListener(new OnItemClickListener() {//当listview的一个条目被点击的时候调用@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {//[5]把点击条目的数据取出来 掌握一条原则:数据在哪里存着就去哪里去String content = objects[position];//[6]跳转到发送短信页面// <intent-filter>// <action android:name="android.intent.action.SEND" />// <category android:name="android.intent.category.DEFAULT" />// <data android:mimeType="text/plain" />// </intent-filter>Intent intent = new Intent();//设置actionintent.setAction("android.intent.action.SEND");//设置categoryintent.addCategory("android.intent.category.DEFAULT");//设置mimeTypeintent.setType("text/plain");//传递数据intent.putExtra("sms_body", content);//[7]跳转到发送短信页面startActivity(intent);}});}
6    短信发送器小案例
package com.phone.smssend;import java.util.ArrayList;import android.content.Intent;import android.os.Bundle;import android.app.Activity;import android.telephony.SmsManager;import android.view.View;import android.widget.EditText;public class MainActivity extends Activity {private EditText et_number;private EditText et_content;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_content = (EditText) findViewById(R.id.et_content);et_number = (EditText) findViewById(R.id.et_number);}// 点击按钮 跳转到ContactActivity页面public void click(View v) {Intent intent = new Intent(this, ContactActivity.class);// startActivity(intent);// 小细节 如果点击按钮开启了另外一Activity 并且当开启的这个Activity关闭的时候 想要这个开启Activity的数据// 用下面这个方法开启ActivitystartActivityForResult(intent, 1);}// 当我们开启的Activity页面关闭的时候这个方法被调用@Overrideprotected void onActivityResult(int arg0, int arg1, Intent arg2) {if (arg0 == 1 && arg1 == 10) {String phone = arg2.getStringExtra("phone");et_number.setText(phone);}if (arg0 == 2 && arg1 == 20) {String template = arg2.getStringExtra("template");et_content.setText(template);}super.onActivityResult(arg0, arg1, arg2);}// 点击按钮 插入模板public void insert(View v) {Intent intent = new Intent(this, SmstemplateActivity.class);startActivityForResult(intent, 2);}// 点击按钮 发送短信public void send(View v) {// [1]获取发送短信的号码和内容String number = et_number.getText().toString().trim();String content = et_content.getText().toString().trim();// [2]获取smsmanager实例SmsManager smsManager = SmsManager.getDefault();ArrayList<String> divideMessage = smsManager.divideMessage(content);for (String msm : divideMessage) {/*** destinationAddress 发送给谁* scAddress 服务中心号码* text 要发送的内容* sentIntent 广播,发送成功的一个意图* deliveryIntent 广播,发送失败的一个意图*/smsManager.sendTextMessage(number, null, msm, null, null);}}}
package com.phone.smssend;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;public class ContactActivity extends Activity {private List<Person> lists;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 加载布局setContentView(R.layout.activity_contact);//[1]找到控件ListView lv = (ListView) findViewById(R.id.lv);//[2]准备listview要显示的数据 模拟数据lists = new ArrayList<Person>();for (int i = 0; i < 50; i++) {Person person = new Person();person.setName("张三" + i);person.setPhone("11" + i);lists.add(person);}//[3]展示数据lv.setAdapter(new MyAdapter());//[4]给listview设置点击事件lv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {//[5]获取点中的条目的数据String phone = lists.get(position).getPhone();//[6]把phone 返回给mainActivity//把数据返回给调用者Intent intent = new Intent();intent.putExtra("phone", phone);//把结果返回给调用者setResult(10, intent);//关闭当前页面finish();}});}private class MyAdapter extends BaseAdapter{@Overridepublic int getCount() {return lists.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view;if(convertView == null){view = View.inflate(getApplicationContext(), R.layout.contact_item, null);}else{view = convertView;}//[1]找到在item中定义的控件用来显示数据TextView tv_name = (TextView) view.findViewById(R.id.tv_name);TextView tv_phone = (TextView) view.findViewById(R.id.tv_phone);//[2]展示数据tv_name.setText(lists.get(position).getName());tv_phone.setText(lists.get(position).getPhone());return view;}}}
package com.phone.smssend;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;public class SmstemplateActivity extends Activity {private String lists[];@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_smstemplate);ListView lv = (ListView) findViewById(R.id.lv);//[2]准备listview要显示的数据 模拟数据lists = new String[] {"清晨起床问早安,愿你精神放松一整天,压力见你绕身跑,同事相处和睦伴,吃好喝好润心田,加强锻炼身体健,祝你每天好心情,快乐每一天"," 早晨的霞光灿烂无比,早晨的露珠晶莹无比,早晨的鲜花美丽无比,早晨的空气新鲜无比,早晨的情绪舒畅无比。愿我最亲爱的朋友,早安快乐!"," 每一天醒来告诉自己:理由少一点,肚量大一点,嘴巴甜一点,脾气小一点,行动快一点,效率高一点,微笑露一点,脑筋活一点。美好一天的开始,道声:“早安快乐!”"," 人生的每一次付出就像在山谷当中的喊声,你没有必要期望要谁听到,但那延绵悠远的回音,就是生活对你最好的回报。新的一天新的开始,早安!","当第一线光明照彻天际,当第一缕阳光洒满人间,当第一丝清风拂过脸颊,当第一曲铃声悠然响起,那是我的祝福早早来到,愿你拥有一天好心情。早安!"};//[3]展示数据lv.setAdapter(new MyAdapter());//[4]给listview设置点击事件lv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {//[5]获取点中的条目的数据String template = lists[position];//[6]把phone 返回给mainActivity//把数据返回给调用者Intent intent = new Intent();intent.putExtra("template", template);//把结果返回给调用者setResult(20, intent);//关闭当前页面finish();}});}private class MyAdapter extends BaseAdapter{@Overridepublic int getCount() {return lists.length;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view;if(convertView == null){view = View.inflate(getApplicationContext(), R.layout.smstemplate_item, null);}else{view = convertView;}//[1]找到在item中定义的控件用来显示数据TextView tv_name = (TextView) view.findViewById(R.id.tv_mess);//[2]展示数据tv_name.setText(lists[position]);return view;}}}
7    Activity的生命周期
    [1]onCreate方法
    [2]ondestroy方法    当Activity销毁时调用
    [3]onStart方法    当Activity界面变成可视的时候调用
    [4]onStop方法    当Activity界面变成不可视的时候调用
    [5]onResume方法    界面(有按钮)可以被点击了 获取了焦点(可以交互)
    [6]onPause方法    界面上(按钮)不可以被点击了 失去了焦点(不可以交互)
    [7]]onRestart方法    当Activity界面再次变成可视的时候调用
8    横竖屏切换Activity的生命周期
    ctrl + F11
    android:screenOrientation="portrait"   代表竖屏   
    android:screenOrientation="landscape"   代表横屏
9    任务栈的概念
    栈:先进后出
    队列:先进先出
    task 任务
    [1]打开一个Activity叫进栈
    [2]关闭一个Activity叫出栈
    [3]我们操作的Activity永远是栈顶的Activity
    [4]任务栈是用来维护用户操作体验的
    [5]应用程序退出了也就是任务栈清空了
    [6]一般情况一个应用程序对应一个任务栈
10    Acitivity的四种启动模式
   android:launchMode="standard"   标准模式
   android:launchMode="singleTop"   单一顶部模式   如果任务栈的栈顶存在这个要开启Activity,不会重新的创建activity,而是复用已经存在的activity.保证栈顶如果存在,不会重复创建 。应用场景:浏览器的书签
   android:launchMode="singleTask"   单一任务栈   当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个实例存在。应用场景:浏览器的activity   如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式
   android:launchMode="singleInstance"   该启动模式非常特殊,activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在   如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance.   应用场景:来电页面
    只言片语任我说,提笔句句无需忖。落笔不知寄何人,唯有邀友共斟酌。
                    
                
                
            
        
浙公网安备 33010602011771号