[安卓基础]学习第六天

一、如何创建一个新的Activity

- 安卓的四大组件都要在manifest.xml清单文件配置
- 如果想让应用有多个启动图标,需要配置清单文件为
    <category android:name="android.intent.category.LAUNCHER" />
- Activity下的lable属性和icon属性可以和Application节点的属性不一样,默认用Application节点下的属性
- 一个Android应用下,我们配置一个启动图标即可,其他的页面都是从第一个页面跳转进去的

二、隐式意图(intent)

2-1.清单文件配置

节点配置

mimeType:设置数据类型
    Set the data this intent is operating on. This method automatically clears any type that was previously set by setType or setTypeAndNormalize. 
scheme:约束
    This method automatically clears any data that was previously set (for example by setData). 

[小细节]如果setData()和setType()一起使用的时候,要使用setDataAndType()

<data android:scheme="M"
    android:mimeType="aa/bb"
    />
-----------------------------------------------------------
// 点击按钮实现页面跳转
public void click02(View v) {
    // 创建意图对象
    Intent intent = new Intent();
    // 设置action
    intent.setAction("android.intent.action.TEST_ACTIVITY");
    //设置category
    intent.addCategory("android.intent.category.DEFAULT");
    /***************************************************
    // 设置数据类型
    intent.setType("aa/bb");
    // 设置数据
    intent.setData(Uri.parse("M:" + 2017));
    ****************************************************/
    intent.setDataAndType(Uri.parse("M:" + 2017), "aa/bb");
    // 开启Activity
    this.startActivity(intent);
}

2-2.隐式意图的定义

通过指定一组动作或者数据

三、显示意图

3-1.显示意图定义

通过指定具体的包名和类名

3-2.总结:

1. 开启自己应用的界面用显示意图
2. 开启其他应用(系统应用)的时候用隐式意图
3. 显示意图更加安全一些

四、案例

4-1.案例——人品计算器

数据的传递

1. 通过getIntent()获取
    小技巧:传递的类型是什么类型,就用什么类型去取
public class ResultActivity extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        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_dec = (TextView) findViewById(R.id.tv_dec);

        Intent intent = getIntent();
        // 小技巧:传递的类型是什么类型,就用什么类型去取
        String name = intent.getStringExtra("name");
        int sex = intent.getIntExtra("sex",0);

        byte[] bytes = null;

        tv_name.setText("Name: " + name);
        try {
            switch(sex){
            case 0:
                tv_sex.setText("sex: 男");
                bytes = name.getBytes("gbk");
                break;
            case 1:
                tv_sex.setText("sex: 女");
                bytes = name.getBytes("utf-8");
                break;
            case 2:
                tv_sex.setText("sex: ...");
                bytes = name.getBytes("iso-8859-1");
                break;
            default:
                Toast.makeText(getApplicationContext(), "未知错误", 1).show();
                break;
            }
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // 计算人品的结果
        int total = 0;
        for (byte b : bytes) {  //0001 0010
            int num = b & 0xFF;
            total += num;
        }
        int score = Math.abs(total) % 100;
        if(score > 90){
            tv_dec.setText("你的人品太好了!");
        }else if(score > 80){
            tv_dec.setText("你的人品还行了!");
        }else if(score > 60){
            tv_dec.setText("你的人品及格了!");
        }else{
            tv_dec.setText("你的人品不及格!");
        }
    }
}

4-2.案例——短信大全

public class MainActivity extends Activity {

    String mess[] = {"今天的风儿轻柔无比,今天的花儿香飘万里;今天的鸟儿十分欢喜,今天的云儿满载笑意;今天的事儿万分顺利,今天的人儿如此甜蜜。所有美...",
                    "丫头,生活是你自己的,你哭它就对你哭,你笑它就对你笑。转眼,又是一年,你的生日即将来到。今年,还是少不了我对你的祝福,我忍不住...",
                    "世界上最动听的声音,是妈妈声声的呼唤;世界上最温暖的笑容,是妈妈温暖的笑脸。妈妈,原谅生日时我不能陪在您身边,在这个日子里,我..."};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView lv = (ListView) findViewById(R.id.lv);
        // 设置数据,先有数据
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item,mess);
        // 设置数据适配器
        lv.setAdapter(adapter);

        // 给ListView设置监听事件
        lv.setOnItemClickListener(new OnItemClickListener() {

            // 当listView的一个条目被点击时调用
            // Callback method to be invoked when an item in this AdapterView has been clicked. 
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // 把点击条目的数据取出来
                String content = mess[position];
                // 跳转到短信页面
                /*<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();
                intent.setAction("android.intent.action.SEND");
                intent.addCategory("android.intent.category.DEFAULT");
                intent.setType("text/plain");

                // 传递数据
                intent.putExtra("sms_body", content);

                startActivity(intent);
            }

        });
    }
}

4-3.案例总结:

共同点:A界面-->B界面,然后把A界面的数据传输到B界面
        A界面-->B界面,当B页面关闭的时候,把数据返回给界面 

4-4.案例——短信

- 布局:
    EditText中的内容对于自身的位置设置用android:gravity="",如android:gravity="top"
- 小细节:如果要开启的Activity需要返回数据,并且当开启的activity关闭的时候,想要得到开启的Activity的数据的时候,用startActivityForResult()开启
- 请求码和结果码的作用:指明数据的来源

五、Activity的生命周期

image

[1]onCreate()
[2]onDestroy()  当Activity销毁时调用
[3]onStart()    当Activity变成可视的时候调用
[4]onStop()     当Activity不可见的时候调用
[5]onResume()   当Activity开始交互的时候调用点击页面按钮 获取焦点
[6]onPause()    当Activity上的按钮不可以被点击 失去焦点
[7]onRestart()  当Activity被重新启动的时候调用

六、横竖屏切换Activity的生命周期

6-1.设置横竖屏

在清单文件中配置avtivity下的android:screenOrientation=""属性
- portrait竖屏
- landscape横屏

七、任务栈的概念

task,什么叫任务?
- 打开一个Activity叫进栈,关闭一个Activity叫出栈
- 我们操作的Acitivity永远是栈顶的那一个
- 任务栈是用来维护用户体验的
- 应用程序退出了,是任务栈清空了
- 一般情况下一个应用对应一个任务栈

八、Activity的四种启动模式

在清单文件中配置avtivity下的android:launchMode=""属性
- stander
- singletop
    检查任务栈的栈顶
- singetask
    检查任务栈
- singleInstance
    系统会会为这个avtivity单独的创建任务栈,并且仅一个实例存在,与当前应用的其他avtivity无关

九、总结

- 如何创建一个新的Actiity
- 显示意图,隐式意图 ★
- 界面之间传递数据 ☆ putExtra()   用map封装的
- 开启Activity的两种方式
- 请求码和结果码
- 关闭一个Activity用finnis()
- Activity的生命周期
- 横竖屏进行切换
- task  ☆ 
- Activity的四种启动模式    ☆ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值