Activity(undone)

来源:互联网 发布:台湾海军实力 知乎 编辑:程序博客网 时间:2024/06/03 04:34

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