一. Intent 分为两种,显示Intent 和隐式Intent
- 显示Intent
Intent intent = new Intent(context, InvoiceActivity.class);
startActivity(intent);
2.隐式Intent,应用中,我们在许多功能中都会使用到隐式的intent, 例如:拍照以及拨打电话,打开手中的应用市场等等...
/**
* 隐式的intent,是通过在<activity>标签下配置的<intent-filter>内容,通过里面的<action><category>以及<data>标签来
* 响应当前的活动。
* <data> 标签:scheme, host, port, path, mineType
*
* <activity android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:host="www.baidu.com"
android:scheme="http"
/>
</intent-filter>
</activity>
*
*/
public class MainActivity extends Activity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.bt_click).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_click:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
break;
}
}
}
清单文件里面:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:host="www.baidu.com"
android:scheme="http"
/>
</intent-filter>
</activity>
</application>
二. 活动的启动模式:standard, singleTop, singleTask, singleInstance
Android是通过返回栈来管理活动的,栈是先进后出的。
standard : 是系统默认的启动模式,每当启动一个活动,这个活动就会进栈。
singleTop: 在启动活动的时候,发现栈顶就是该活动,就会直接使用它,不再重新启动新的活动, 解决了重复创建栈顶活动的问题。
singleTask: 在站内发现有该活动,直接使用这个活动,不需要重新创建,而且,这个活动以上的活动都要出栈。这个活动就会成为栈顶。举个简单的小例子:现在有四个活动,FirstActivity, SecondActivity, ThirdActivity, FourthActivity。 这四个活动依次进栈,然后,FirstActivity的启动模式是singleTask, 栈顶的FourthActivity跳转到FirstActivity, 这个时候,不会重新的创建活动,FourthActivity,ThirdActivity, SecondActivity 三个活动依次出栈。
singleInstance: 如果一个活动的启动模式是singleInstance, 那么启动这个活动的时候会重新创建一个新的栈。FirstActivity, SecondActivity, ThirdActivity, 其中SecondActivity是singleInstance, 这时候,我们点击返回键,从ThirdActivity直接的跳转到了FirstActivity, 再次点击返回按钮,从FirstActivity返回到了SecondActivity。
因为FirstActivity和ThirdActivity是一个栈,SecondActivity是单独的一个栈。
三、 屏幕的适配
px, dp, dip, dpi, sp
屏幕分辨率就是屏幕所含的像素数,比如1080*1920是指屏幕的宽有1080像素,高有1920像素。当然这个像素的单位就是我们要说的px
px: 像素的单位。
dpi: 像素密度(每英尺所包含的点数目)
dp = dip : 像素无关密度
dpi :
ldpi : < 120
mdpi: 120 ~ 160
hdpi: 160 ~ 240
xhdpi : 240 ~ 320
xxhdpi: 320~ 480
xxxhdpi: 480~640
规定是: 160dpi的手机上, 1dp = 1px
然后比例换算就是: 0.75 : 1 : 1.5 : 2: 3: 4
在对控件进行设置宽度与高度的时候,能用px作为单位吗?显而易见,是不能的。例如,同样是5.0寸的手机,不同的像素,那么用px作为单位,这个显示view的大小就不同,这显然不是我们想要的。在布局当中,用dp作为单位,就可以解决适配问题。