day06

1    如何创建一个新的Activity
    [1]Android的四大组件都要在清单文件里面配置
    [2]如果你想让你的应用有多个启动图标,你的Activity需要配置 如下
  1. <intent-filter>
  2. <action android:name="android.intent.action.MAIN" />
  3. <category android:name="android.intent.category.LAUNCHER" />
  4. </intent-filter>
    [3]Activity下的lable和icon属性可以和Application节点的属性不一样    默认用Application节点下的属性
    [4]一个Android应用一般配置一个启动图片就可以 看见的其他页面都是从第一个页面跳转过去的

2    隐式意图
    定义:通过制定一组动作或者数据
  1. // [1]创建意图对象 意图就是我要完成一件事
  2. Intent intent = new Intent();
  3. // [2]设置跳转的动作
  4. intent.setAction("com.phone.testactivity");
  5. // [3]设置category
  6. intent.addCategory("android.intent.category.DEFAULT");
  7. // [4]设置数据类型
  8. // intent.setType("aa/bb");
  9. // [5]设置数据
  10. // intent.setData(Uri.parse("phone:" + 110));
  11. // [6]注意小细节☆如果setdata方法和settype方法一起使用的时候 应该使用下面这个方法
  12. intent.setDataAndType(Uri.parse("phone:" + 110), "aa/bb");
  13. // [7]开启Activity 记得加权限
  14. startActivity(intent);

3    显示意图
    定义:通过指定具体的包名和类名
  1. // [1]创建意图对象 意图就是我要完成一件事
  2. Intent intent = new Intent(this, Test3Activity.class);
  3. // [2]设置包名和类名
  4. // intent.setClassName("com.phone.newacitivity",
  5. // "com.phone.newacitivity.Test3Activity");
  6. // [4]开启Activity 记得加权限
  7. startActivity(intent);

    总结:[1]开启自己应用的界面用显示意图
              [2]开启其他应用(系统应用)的时候用隐士意图
              [3]显示意图安全一些

4    人品计算器小案例
    
  1. package com.phone.rpcalc;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.text.TextUtils;
  6. import android.view.View;
  7. import android.widget.EditText;
  8. import android.widget.RadioGroup;
  9. import android.widget.Toast;
  10. public class MainActivity extends Activity {
  11. private EditText et_name;
  12. private RadioGroup rg_group;
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. et_name = (EditText) findViewById(R.id.et_name);
  18. rg_group = (RadioGroup) findViewById(R.id.radioGroup1);
  19. }
  20. // 点击按钮 实现计算人品 跳转到ResultActivity页面
  21. public void click(View v) {
  22. // [1]获取用户名
  23. String name = et_name.getText().toString().trim();
  24. // [2]判断一下name是否为空
  25. if (TextUtils.isEmpty(name)) {
  26. Toast.makeText(getApplicationContext(), "亲,请输入姓名", 1).show();
  27. return;
  28. }
  29. // [3]判断用户选择的性别
  30. int radioButtonId = rg_group.getCheckedRadioButtonId();
  31. int sex = 0;
  32. switch (radioButtonId) {
  33. // 代表选择的是男
  34. case R.id.rb_male:
  35. sex = 1;
  36. break;
  37. // 代表选择的是女
  38. case R.id.rb_female:
  39. sex = 2;
  40. break;
  41. // 代表选择的是人妖
  42. case R.id.rb_other:
  43. sex = 3;
  44. break;
  45. }
  46. if(sex == 0){
  47. Toast.makeText(getApplicationContext(), "请选择性别", 1).show();
  48. return;
  49. }
  50. //[4]跳转到ResultActivity页面 用显示意图 跳转
  51. Intent intent = new Intent(this,ResultActivity.class);
  52. //传递姓名
  53. intent.putExtra("name", name );
  54. //传递性别
  55. intent.putExtra("sex", sex);
  56. startActivity(intent);
  57. }
  58. }
  1. package com.phone.rpcalc;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.widget.TextView;
  6. import android.widget.Toast;
  7. public class ResultActivity extends Activity {
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. // TODO Auto-generated method stub
  11. super.onCreate(savedInstanceState);
  12. // [1]加载布局
  13. setContentView(R.layout.activity_result);
  14. TextView tv_name = (TextView) findViewById(R.id.tv_name);
  15. TextView tv_sex = (TextView) findViewById(R.id.tv_sex);
  16. TextView tv_result = (TextView) findViewById(R.id.tv_result);
  17. // [2]获取mainActivity传递过来的数据
  18. // 获取开启此Activity的意图对象
  19. Intent intent = getIntent();
  20. // [3]获取name和sex的值
  21. // 小技巧:传递的是什么数据类型 这边就按照传递的数据类型取
  22. String name = intent.getStringExtra("name");
  23. int sex = intent.getIntExtra("sex", 0);
  24. // [4]根据name和sex显示数据
  25. tv_name.setText(name);
  26. byte[] bytes = null;
  27. // [5]显示性别
  28. try {
  29. switch (sex) {
  30. case 1:
  31. tv_sex.setText("男");
  32. bytes = name.getBytes("gbk");
  33. break;
  34. case 2:
  35. tv_sex.setText("女");
  36. bytes = name.getBytes("utf-8");
  37. break;
  38. case 3:
  39. tv_sex.setText("人妖");
  40. bytes = name.getBytes("iso-8859-1");
  41. break;
  42. default:
  43. break;
  44. }
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. }
  48. // [6]计算人品结果 市面上大多数应用采用的是随机数
  49. int total = 0;
  50. for (byte b : bytes) {
  51. int number = b & 0xff;
  52. total += number;
  53. }
  54. // 获取得分
  55. int score = Math.abs(total) % 100;
  56. if (score > 90) {
  57. tv_result.setText("您的人品非常好,您家的祖坟都冒青烟啦");
  58. } else if (score > 80) {
  59. tv_result.setText("您的人品还可以");
  60. } else if (score > 60) {
  61. tv_result.setText("您的人品刚好及格");
  62. } else {
  63. tv_result.setText("您的人品太次了,您需要努力呀");
  64. }
  65. }
  66. }



5    短信大全小案例
  1. String objects[] = {"今天的风儿轻柔无比,今天的花儿香飘万里;今天的鸟儿十分欢喜,今天的云儿满载笑意;今天的事儿万分顺利,今天的人儿如此甜蜜。所有美...",
  2. "丫头,生活是你自己的,你哭它就对你哭,你笑它就对你笑。转眼,又是一年,你的生日即将来到。今年,还是少不了我对你的祝福,我忍不住...",
  3. "世界上最动听的声音,是妈妈声声的呼唤;世界上最温暖的笑容,是妈妈温暖的笑脸。妈妈,原谅生日时我不能陪在您身边,在这个日子里,我...",
  4. "今天是你的生日,祝你:发财势头如快马加鞭,一日千里;发展速度如滔滔江水,势不可挡;好事发生如雨后春笋,络绎不绝;祝福发送如比赛...",
  5. "茫茫人海相逢是缘分,芸芸众生相知是福气,年年月月相交是情谊。高山流水知音难求,你我手足兄弟情深。巴山夜雨,飘洒我的思念。剪烛西..."};
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. //[1]找到控件
  11. ListView lv = (ListView) findViewById(R.id.lv);
  12. //[2]设置数据 先有数据
  13. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item,objects);
  14. //[3]设置数据适配器
  15. lv.setAdapter(adapter);
  16. //[4]给listview设置点击事件
  17. lv.setOnItemClickListener(new OnItemClickListener() {
  18. //当listview的一个条目被点击的时候调用
  19. @Override
  20. public void onItemClick(AdapterView<?> parent, View view,
  21. int position, long id) {
  22. //[5]把点击条目的数据取出来 掌握一条原则:数据在哪里存着就去哪里去
  23. String content = objects[position];
  24. //[6]跳转到发送短信页面
  25. // <intent-filter>
  26. // <action android:name="android.intent.action.SEND" />
  27. // <category android:name="android.intent.category.DEFAULT" />
  28. // <data android:mimeType="text/plain" />
  29. // </intent-filter>
  30. Intent intent = new Intent();
  31. //设置action
  32. intent.setAction("android.intent.action.SEND");
  33. //设置category
  34. intent.addCategory("android.intent.category.DEFAULT");
  35. //设置mimeType
  36. intent.setType("text/plain");
  37. //传递数据
  38. intent.putExtra("sms_body", content);
  39. //[7]跳转到发送短信页面
  40. startActivity(intent);
  41. }
  42. });
  43. }

6    短信发送器小案例
    
  1. package com.phone.smssend;
  2. import java.util.ArrayList;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.app.Activity;
  6. import android.telephony.SmsManager;
  7. import android.view.View;
  8. import android.widget.EditText;
  9. public class MainActivity extends Activity {
  10. private EditText et_number;
  11. private EditText et_content;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. et_content = (EditText) findViewById(R.id.et_content);
  17. et_number = (EditText) findViewById(R.id.et_number);
  18. }
  19. // 点击按钮 跳转到ContactActivity页面
  20. public void click(View v) {
  21. Intent intent = new Intent(this, ContactActivity.class);
  22. // startActivity(intent);
  23. // 小细节 如果点击按钮开启了另外一Activity 并且当开启的这个Activity关闭的时候 想要这个开启Activity的数据
  24. // 用下面这个方法开启Activity
  25. startActivityForResult(intent, 1);
  26. }
  27. // 当我们开启的Activity页面关闭的时候这个方法被调用
  28. @Override
  29. protected void onActivityResult(int arg0, int arg1, Intent arg2) {
  30. if (arg0 == 1 && arg1 == 10) {
  31. String phone = arg2.getStringExtra("phone");
  32. et_number.setText(phone);
  33. }
  34. if (arg0 == 2 && arg1 == 20) {
  35. String template = arg2.getStringExtra("template");
  36. et_content.setText(template);
  37. }
  38. super.onActivityResult(arg0, arg1, arg2);
  39. }
  40. // 点击按钮 插入模板
  41. public void insert(View v) {
  42. Intent intent = new Intent(this, SmstemplateActivity.class);
  43. startActivityForResult(intent, 2);
  44. }
  45. // 点击按钮 发送短信
  46. public void send(View v) {
  47. // [1]获取发送短信的号码和内容
  48. String number = et_number.getText().toString().trim();
  49. String content = et_content.getText().toString().trim();
  50. // [2]获取smsmanager实例
  51. SmsManager smsManager = SmsManager.getDefault();
  52. ArrayList<String> divideMessage = smsManager.divideMessage(content);
  53. for (String msm : divideMessage) {
  54. /**
  55. * destinationAddress 发送给谁
  56. * scAddress 服务中心号码
  57. * text 要发送的内容
  58. * sentIntent 广播,发送成功的一个意图
  59. * deliveryIntent 广播,发送失败的一个意图
  60. */
  61. smsManager.sendTextMessage(number, null, msm, null, null);
  62. }
  63. }
  64. }
  1. package com.phone.smssend;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.app.Activity;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.widget.AdapterView;
  10. import android.widget.AdapterView.OnItemClickListener;
  11. import android.widget.BaseAdapter;
  12. import android.widget.ListView;
  13. import android.widget.TextView;
  14. public class ContactActivity extends Activity {
  15. private List<Person> lists;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. // 加载布局
  20. setContentView(R.layout.activity_contact);
  21. //[1]找到控件
  22. ListView lv = (ListView) findViewById(R.id.lv);
  23. //[2]准备listview要显示的数据 模拟数据
  24. lists = new ArrayList<Person>();
  25. for (int i = 0; i < 50; i++) {
  26. Person person = new Person();
  27. person.setName("张三" + i);
  28. person.setPhone("11" + i);
  29. lists.add(person);
  30. }
  31. //[3]展示数据
  32. lv.setAdapter(new MyAdapter());
  33. //[4]给listview设置点击事件
  34. lv.setOnItemClickListener(new OnItemClickListener() {
  35. @Override
  36. public void onItemClick(AdapterView<?> parent, View view,
  37. int position, long id) {
  38. //[5]获取点中的条目的数据
  39. String phone = lists.get(position).getPhone();
  40. //[6]把phone 返回给mainActivity
  41. //把数据返回给调用者
  42. Intent intent = new Intent();
  43. intent.putExtra("phone", phone);
  44. //把结果返回给调用者
  45. setResult(10, intent);
  46. //关闭当前页面
  47. finish();
  48. }
  49. });
  50. }
  51. private class MyAdapter extends BaseAdapter{
  52. @Override
  53. public int getCount() {
  54. return lists.size();
  55. }
  56. @Override
  57. public Object getItem(int position) {
  58. return null;
  59. }
  60. @Override
  61. public long getItemId(int position) {
  62. return 0;
  63. }
  64. @Override
  65. public View getView(int position, View convertView, ViewGroup parent) {
  66. View view;
  67. if(convertView == null){
  68. view = View.inflate(getApplicationContext(), R.layout.contact_item, null);
  69. }else{
  70. view = convertView;
  71. }
  72. //[1]找到在item中定义的控件用来显示数据
  73. TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
  74. TextView tv_phone = (TextView) view.findViewById(R.id.tv_phone);
  75. //[2]展示数据
  76. tv_name.setText(lists.get(position).getName());
  77. tv_phone.setText(lists.get(position).getPhone());
  78. return view;
  79. }
  80. }
  81. }
  1. package com.phone.smssend;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.AdapterView;
  8. import android.widget.AdapterView.OnItemClickListener;
  9. import android.widget.BaseAdapter;
  10. import android.widget.ListView;
  11. import android.widget.TextView;
  12. public class SmstemplateActivity extends Activity {
  13. private String lists[];
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity_smstemplate);
  18. ListView lv = (ListView) findViewById(R.id.lv);
  19. //[2]准备listview要显示的数据 模拟数据
  20. lists = new String[] {"清晨起床问早安,愿你精神放松一整天,压力见你绕身跑,同事相处和睦伴,吃好喝好润心田,加强锻炼身体健,祝你每天好心情,快乐每一天",
  21. " 早晨的霞光灿烂无比,早晨的露珠晶莹无比,早晨的鲜花美丽无比,早晨的空气新鲜无比,早晨的情绪舒畅无比。愿我最亲爱的朋友,早安快乐!",
  22. " 每一天醒来告诉自己:理由少一点,肚量大一点,嘴巴甜一点,脾气小一点,行动快一点,效率高一点,微笑露一点,脑筋活一点。美好一天的开始,道声:“早安快乐!”",
  23. " 人生的每一次付出就像在山谷当中的喊声,你没有必要期望要谁听到,但那延绵悠远的回音,就是生活对你最好的回报。新的一天新的开始,早安!",
  24. "当第一线光明照彻天际,当第一缕阳光洒满人间,当第一丝清风拂过脸颊,当第一曲铃声悠然响起,那是我的祝福早早来到,愿你拥有一天好心情。早安!"};
  25. //[3]展示数据
  26. lv.setAdapter(new MyAdapter());
  27. //[4]给listview设置点击事件
  28. lv.setOnItemClickListener(new OnItemClickListener() {
  29. @Override
  30. public void onItemClick(AdapterView<?> parent, View view,
  31. int position, long id) {
  32. //[5]获取点中的条目的数据
  33. String template = lists[position];
  34. //[6]把phone 返回给mainActivity
  35. //把数据返回给调用者
  36. Intent intent = new Intent();
  37. intent.putExtra("template", template);
  38. //把结果返回给调用者
  39. setResult(20, intent);
  40. //关闭当前页面
  41. finish();
  42. }
  43. });
  44. }
  45. private class MyAdapter extends BaseAdapter{
  46. @Override
  47. public int getCount() {
  48. return lists.length;
  49. }
  50. @Override
  51. public Object getItem(int position) {
  52. return null;
  53. }
  54. @Override
  55. public long getItemId(int position) {
  56. return 0;
  57. }
  58. @Override
  59. public View getView(int position, View convertView, ViewGroup parent) {
  60. View view;
  61. if(convertView == null){
  62. view = View.inflate(getApplicationContext(), R.layout.smstemplate_item, null);
  63. }else{
  64. view = convertView;
  65. }
  66. //[1]找到在item中定义的控件用来显示数据
  67. TextView tv_name = (TextView) view.findViewById(R.id.tv_mess);
  68. //[2]展示数据
  69. tv_name.setText(lists[position]);
  70. return view;
  71. }
  72. }
  73. }

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.   应用场景:来电页面






只言片语任我说,提笔句句无需忖。落笔不知寄何人,唯有邀友共斟酌。
原文地址:https://www.cnblogs.com/phonecom/p/014adeee5396899aee7b7b528a338156.html