第二章 先从看得到的入手——探究活动
重写Activity的onCreate()方法
public class ActivityName extends AppCompatActivity{
@override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedINstanceState);
setContentView(R.layout.first_layout);
}
}
在AndroidManifest文件中注册
<mainfest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activitytest"
<application
<activity android:name=".FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</activity>
</application>
</manifest>
其中,以下两行为主Activity,运行该项目时将自动启动该Activity
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
Toast
Toast是Android系统的提供一种提醒方式。
Toast.makeText(FirstActivity.this,"You clicked Button 1",Toast.LENGTH_SHORT).show();
Menu
标签用来创建具体的菜单项,然后通过android:id="@+id/"
给这个菜单项指定一个唯一的标识符。
在Activity中重写onCreateOptionsMenu()
方法。
public boolea onCreateOptionsMenu(Menu menu){
getMenuInflater.inflate(R.menu.main, menu);
return true;
}
inflate()的作用就是将一个用xml定义的布局文件查找出来,注意与findViewById()的区别,inflate是加载一个布局文件,而findViewById则是从布局文件中查找一个控件。
在Activity中重写onOptionsItemSelected()
方法:
public boolean onOptionsItemSelected(@NotNull MenuItem item){
//switch…case语句中不能使用R.id
}
Intent
Intent是一个可以从一个应用程序请求动作的消息处理对象。可以实现组件间的通信,主要有以下三种基本应用:开启Activity,开启Service,开启Broadcast。
Intent种类分为两种:显示Intent和隐式Intent。
显示Intent:
显示Intent是指在创建Intent对象时就指定接收者(如:ACtivity、Service或者BroadcastReceiver),以Activity为例,在启动Activity时必须在Intent中指明要启动的Activity所在的类。通常情况下,在一个Android项目中,如果只有一个Activity,那么只需要在AndroidManifest.xml中进行配置,并将其设置为程序的入口,这样,当运行该项目时将自启动该Activity。否则,需要应用Intent和startActivity()方法来启动需要的Activity,具体步骤如下:
Intent intent = new Intent(Context packageContext, Class<?>cls)
packageContext:用于指定一个启动Activity的上下文对象,可以用ActivityName.this来指定
cls:用于指定要启动的Activity所在的类,可以用ActivityName.class来指定
eg:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
之后,startActivity()方法启动Activity
public void startActivity(Intent intent)
隐式Intent:
隐式Intent是指创建Activity对象时不指定具体的接收者,而是定义要执行的Action、Category和Date,然后让Android系统根据相应的匹配机制找到要启动的Activity。
在使用隐式Intent启动Activity时,需要为Intent对象定义Action、Category和Data属性,然后再调用startActivity()启动匹配的Activity。
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
每个intent只能指定一个action,但却能指定多个category,可以使用addcategory()
方法进行添加。
在自己定义的活动中进行设置以满足隐式intent的条件,在标签下配置的内容,可以指定当前活动能够响应的action和category,
<intent-filter>
<action android:name="android:intent:action:MYACTION"/>
<category android:name=" "/>
</intent-filter>
然后,在使用intentActivity时:
Intent = new intent(“android:intent:action:MYACTION”);
startActivity(intent);
intent-filter的action标记
标记用于指定组件所能响应的动作,以字符串形式表示
Android系统支持的标准Action字符串常量如下表所示:
常量(Intent设置中使用) | 对应字符串(intent-filter中使用 ) | 说 明 |
---|---|---|
ACTION_MAIN | android:intent:action:MAIN | 作为初始Activity启动 |
ACTION_VIEW | android.intent.action.VIEW | 查看指定数据 |
ACTION_ACTION_DATA | android.intent.action.ACTION_DATA | 指定某块数据将被附加到其他地方 |
ACTION_EDIT | android.intent.action.EDIT | 编辑指定数据 |
ACTION_PICK | android.intent.action.PICK | 从列表中选择某项,并返回所选的数据 |
ACTION_CHOOSER | android.intent.action.CHOOSER | 显示一个Activity选择器 |
ACTION_GET_CONTENT | android.intent.action.GET_CONTENT | 允许用户选择特定类型的数据并返回 |
ACTION_DIAL | android.intent.action.DIAL | 显示拨号界面 |
ACTION_CALL | android.intent.action.CALL | 直接像指定用户拨打电话 |
ACTION_SEND | android.intent.action.SEND | 向其他人发送数据 |
ACTION_SENDTO | android.intent.action.SENDTO | 向其他人发送消息 |
ACTION_ANSWER | android.intent.action.ANSWER | 应答电话 |
ACTION_INSERT | android.intent.action.INSERT | 插入数据 |
ACTION_DELETE | android.intent.action.DELETE | 删除数据 |
ACTION_RUN | android.intent.action.RUN | 运行数据 |
ACTION_SYNC | android.intent.action.SYNC | 执行数据同步 |
ACTION_PICK_ACTIVITY | android.intent.action.PICK_ACTIVITY | 用于选择Activity |
ACTION_SEARCH | android.intent.action.SEARCH | 执行搜索 |
ACTION_WEB_SEARCH | android.intent.action.WEB_SEARCH | 执行Web搜索 |
ACTION_FACTORY_TEST | android.intent.action.FACTORY_TEST | 工厂测试的入口点 |
intent-filter的data标记
标记用于向Action提供要操作的数据,它可以是一个URI对象或者数据类型,其中URI格式为:
<data android:scheme="string"
android:host="string"
android:port="string"
android:path="string"
android:mimeTyoe="string" />
android:scheme 协议名
android:host 主机名
android:port 端口名
android:path 路径名
android:mimeType 能处理的数据类型
intent-filter的category标记
标记用于指定以何种方式去执行intent请求的动作。
常量 | 常量对应字符串 | 简单说明 |
---|---|---|
CATEGORY_DEFAUL | android.intent.category.DEFAULT | 默认的Category |
CATEGORY_BROWSABLE | android.intent.category.BROWSABLE | 指定该Activity能被浏览器安全调用 |
CATEGORY_TAB | android.intent.category.TAB | 指定Activity作为TabActivity的Tab页 |
CATEGORY_LAUNCHER | android.intent.category.LAUNCHER | Activity显示顶级程序列表中 |
CATEGORY_INFO | android.intent.category.INFO | 用于提供包信息 |
CATEGORY_HOME | android.intent.category.HOME | 设置该Activity随系统启动而运行 |
CATEGORY_PREFERENCE | android.intent.category.PREFERENCE | 该Activity是参数面板 |
CATEGORY_TEST | android.intent.category.TEST | 该Activity是一个测试 |
CATEGORY_CAR_DOCK | android.intent.category.CAR_DOCK | 指定手机被插入汽车底座(硬件)时运行该Activity |
CATEGORY_DESK_DOCK | android.intent.category.DESK_DOCK | 指定手机被插入桌面底座(硬件)时运行该Activity |
CATEGORY_CAR_MODE | android.intent.category.CAR_MODE | 设置该Activity可在车载环境下使用 |
CATEGORY_APP_MARKET | android.intent.category.APP_MARKET | 让Activity允许用户浏览和下载新应用 |
参考《零基础学Android》