过滤器
在介绍Intent种类之前我们先了解一下过滤器,如同名字一样,这个组件就是用于筛选对象,在Activity启动另一个Activity时,可以在中间执行一遍过滤操作,通过筛选的才会被打开,通常在Manifest.xml中进行定义,包括之前接触到的将Activity设置为启动项(入口Activity)也是通过过滤器实现,我们可以在其中对Activity的Action、Category、Data进行设置,一般是Action分别与其他两项结合使用。
启动项过滤器
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
显式Intent:
通过组件名指定启动的目标组件,比如
startActivity(new Intent(A.this,B.class)); 每次启动的组件只有一个
![](https://img.haomeiwen.com/i7415868/456c4d112da1283d.png)
Intent intent = new Intent(Context packageContext, Class<?> cls)
例:
Intent intent = new Intent(MainActivity.this, DetailActivity.class)
隐式Intent:
不指定组件名,而指定Intent的Action,Data,或Category,当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-filter,逐一匹配出满足属性的组件,当不止一个满足时, 会弹出一个让我们选择启动哪个的对话框~
![](https://img.haomeiwen.com/i7415868/e1087fbf09177489.png)
![](https://img.haomeiwen.com/i7415868/46a27f9eb8c84ce6.png)
这里我们结合过滤器做一个隐式Intent的例子,我们通过Activity打开另一个Activity,但是我们并不直接添加Activity,而是通过过滤器进行打开方式的设置。
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="150dp"
android:layout_centerHorizontal="true"
android:scaleType="fitXY"
android:src="@drawable/hehua"/>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/image"
android:layout_centerHorizontal="true"
android:text="查看大图"/>
</RelativeLayout>
activity_contacts.xml(显示图片)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/image1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/hehua"
android:scaleType="fitXY"/>
</RelativeLayout>
MainActivity
package com.example.asus.layout;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
Button button= (Button) findViewById(R.id.btn); //获取按钮组件
//为按钮创建单击事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(); //创建Intent对象
intent.setAction(intent.ACTION_VIEW); //为Intent设置动作
startActivity(intent); //启动Activity
}
});
}
}
ContactsActivity
package com.example.asus.layout;
import android.app.Activity;
import android.os.Bundle;
import android.view.WindowManager;
public class ContactsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
//设置全屏显示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
去Manifest.xml中设置过滤器
<activity android:name=".ContactsActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
![](https://img.haomeiwen.com/i7415868/958e18564bf80872.png)
![](https://img.haomeiwen.com/i7415868/063938943569b52b.png)
区别
![](https://img.haomeiwen.com/i7415868/f6184b886540ac32.png)
网友评论