Activity(undone)

从来没写过日记,一直太忙了,没有时间闲下来,总在效率和深度上摇摆,然后还是妥协的选择了效率。
然而最近去参加面试,遇到两个面试官很年轻,问到的问题都是很细节的东西,自己以前知道或者明明了解过,却脑袋一片空白,才知道细节决定成败。之前的效率还是不牢靠的。
面试真是一个快速了解的过程,通过和其他人交手,就会露出破绽。
学到很多。
世界这么大,我还有很多理想没有完成。
它们的主页:http://www.ttigame.com/
希望半年后可以做出他们的东西出来。。。。

首先是四大组件之一的Activity(viewDetcter),它是用于展示界面的和用户交互,它可以显示一些控件(view的显示流程),也可以监听并处理用户的事件并做出响应(观察者模式).

这个有点像web中的主页面和主页面里面点击超链接跳转到其他界面。

首先做一个Activity:

1.要定义继承Activity
    public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView (R.layout.activity_main);
    }
 2.在AndroidManifest.xml的application节点中声明<Activity>
清单文件的重要参数
    <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"   
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

application:中lable是指程序的名字,在卸载页面显示的名字就是这个lable指定的。
Activity中的lable是指activity的名字,
Action:指定操作的动作
Category:指定意图的类别, Launcher是在桌面创建快捷方式。CAR_DOCK,CAR_MODE就和车载相关

如果此activity还指定了:以下intentfilter,那么这个界面就会在桌面创建快捷方式,快捷方式名字就是这个activity的lable

    <intent-filter>
    <action android:name="android.intent.action.MAIN" />代表应用程序的入口界面
    <category android:name="android.intent.category.LAUNCHER" />代表桌面上的快捷方式
    </intent-filter>

Tips:

  • 去掉Activity应用程序就没有界面了
  • 删除intent-filter节点 对应的Activity界面就看不到了,就被隐藏掉了
  • 可以有多个intent-Filter见系统源码中browser.
  • activity的xml文件,一般尽量以activity_xxx.xml来命名
一个应用程序可以在桌面上产生多个快捷图标

增加第二个Activity,在清单文件里也配成action.MAIN;category.LAUNCHER就会在桌面上出现两个图标
这里写图片描述

Tips:比如Android系统中的联系人和拨号应用就是同一个应用对应着不同的快捷图标

A界面跳转B并传递数据 –intent

  • 如果没有在清单文件中声明intent-filter跳转的时候Activity就会报ActivityNotFindException.

  • new 一个 intent,startActivity(intent)

    有两种跳转的方法
显式意图

根据intent的有参构造函数Intent.Intent(Context packgeContext ,Class <?> cls字节码 );
优点:代码编写简单,不需要在清单文件中配置 意图过滤器 intent-filter,效率很高。
缺点:代码的耦合性比较强。高内敛 低耦合。
应用场景: 自己应用程序开启自己的界面 推荐使用显示意图。

  1.1 Intent intent = new Intent();
    intent.setClassName("com.intent",
            "com.intent.SecondActivity");//类名必须是全路径
    startActivity(intent);


  1.2 Intent intent = new Intent(this,SecondActivity.class);
startActivity(intent);//方便的写法
隐式意图

在代码里面设置intent的action和data,框架通过解析清单文件找到Activity然后开启

// 跳转到第二个界面
Intent intent = new Intent();               intent.setAction("com.itheima.rpcalc.CALC");                intent.setData(Uri.parse("calc://"+et_name.getText().toString()));
startActivity(intent);

应用场景:开启别人应用程序的界面隐式意图.自己的某个界面,想让别的应用程序开启

这里写图片描述

   //显示意图 不需要配置IntentFilter
      Intent intent = new Intent(MainActivity.this, Main2Activity.class);
     intent.setData(Uri.parse("calc://" + name));
     startActivity(intent);
     finish();
对应的
      String data = getIntent().getData().toString();
     data = data.replace("calc://", "");//因为这个的结果是calc://data

   //隐式意图 需要配置IntentFilter
     Intent intent = new Intent();
     intent.setAction(".Main2Activity");
     intent.setData(Uri.parse("rp://" + name));
     startActivity(intent);
     finish();
    清单文件:
  <activity
    android:name=".Main2Activity"
   android:label="@string/title_activity_main2">
       <intent-filter>
          <action android:name=".Main2Activity" />
          <data android:scheme="rp" />
          <category android:name="android.intent.category.DEFAULT" />
          </intent-filter>
        </activity>

获得数据
   String data = getIntent().getData().toString();
   data = data.replace("rp://", "");
   result.setText(data);

之前做过 调用打电话的intent Intent.Action_Call点击看源码就知道 其实是一个字符串

如果要自定义意图,就添加intent filter意图过滤器
`这个就是自定义的,当然可以任意命名,但是实际上我们一般的命名规则是包名.类名.意图的意思.方便辨认。

我们写过“tel:(命名空间,语法前缀)//的”

这个是系统的如果要自定义的话就要在声明一个在Activity中 <data android:scheme="calc"/>

然后再获取数据intent.getData获取数据再toStirng把uri转成字符串 得到传来的值是calc://edittext的内容
那再data.subString(“/”) 来 ,但是这样如果名字有前缀怎么办?
就用data.replace()

其实每个姓名每个中文字符用一种编码转化为int类型的数值,加起来100求余可能是正的可能是负数就取绝对值,就得到0~100之间的数值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值