zoukankan      html  css  js  c++  java
  • 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.   应用场景:来电页面






    只言片语任我说,提笔句句无需忖。落笔不知寄何人,唯有邀友共斟酌。
  • 相关阅读:
    Taro api封装
    taro中如何定义全局变量
    移动端悬浮框可移动,可回弹,Vue and React
    VS2015 安装mvc4安装包以及vs2010 sp1后导致Razor语法失效代码不高亮(能正常运行)/视图页面无法智能提示(.cshtml)解决办法
    C#6.0新特性的尝试
    Visual Studio Code 添加设置代码段(snippet)
    AngularJs的$http发送POST请求,php无法接收Post的数据解决方案
    [Asp.net mvc] 在Asp.net mvc 中使用MiniProfiler
    [Asp.net mvc]实体更新异常:存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。
    win8.1右键新建菜单添加新建php文件
  • 原文地址:https://www.cnblogs.com/phonecom/p/014adeee5396899aee7b7b528a338156.html
Copyright © 2011-2022 走看看