第一種方式,用action來(lái)跳轉(zhuǎn)。
1、使用Action跳轉(zhuǎn),如果有一個(gè)程序的 AndroidManifest.xml中的某一個(gè)Activity的IntentFilter段中定義了包含了相同的Action那么這個(gè)Intent 就與這個(gè)目標(biāo)Action匹配。如果這個(gè)IntentFilter段中沒有定義 Type,Category,那么這個(gè) Activity就匹配了。但是如果手機(jī)中有兩個(gè)以上的程序匹配,那么就會(huì)彈出一個(gè)對(duì)話可框來(lái)提示說(shuō)明。
Action的值在Android中有很多預(yù)定義,如果你想直接轉(zhuǎn)到你自己定義的Intent接收者,你可以在接收者的 IntentFilter中加入一個(gè)自定義的Action值(同時(shí)要設(shè)定 Category值為"android.intent.category.DEFAULT"),在你的Intent中設(shè)定該值為Intent的 Action,就直接能跳轉(zhuǎn)到你自己的Intent接收者中。因?yàn)檫@個(gè)Action在系統(tǒng)中是唯一的。
2,data/type,你可以用Uri來(lái)做為data,比如Uri uri = Uri.parse(http://www.google.com);
Intent i = new Intent(Intent.ACTION_VIEW,uri);手機(jī)的Intent分發(fā)過(guò)程中,會(huì)根據(jù)http://www.google.com 的scheme判斷出數(shù)據(jù)類型type
手機(jī)的Brower則能匹配它,在Brower的Manifest.xml中的IntenFilter中首先有ACTION_VIEW Action,也能處理http:的type。
3,至于分類Category,一般不要去在Intent中設(shè)置它,如果你寫Intent的接收者,就在Manifest.xml的 Activity的 IntentFilter中包含android.category.DEFAULT,這樣所有不設(shè)置Category(Intent.addCategory(String c);)的Intent都會(huì)與這個(gè)Category匹配。
4,extras(附加信息),是其它所有附加信息的集合。使用extras可以為組件提供擴(kuò)展信息,比如,如果要執(zhí)行“發(fā)送電子郵件”這個(gè)動(dòng)作,可以將電子郵件的標(biāo)題、正文等保存在extras里,傳給電子郵件發(fā)送組件。
Java代碼 package com.android.edit_text;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
public class MyEditText extends Activity {
private TextView m_TextView;
private EditText m_EditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
m_EditText = (EditText) this.findViewById(R.id.EditText01);
m_EditText.setOnKeyListener(editTextKeyListener);
}
private EditText.OnKeyListener editTextKeyListener = new EditText.OnKeyListener() {
@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
// action跳轉(zhuǎn),需要在AndroidManifest.xml中配置action
Intent i = new Intent("android.intent.action.mydialog");
MyEditText.this.startActivity(i);
return false;
}
};
}
復(fù)制代碼Xml代碼
package="com.android.edit_text" android:versionCode="1"
android:versionName="1.0">
< intent-filter>
< /intent-filter>
< /activity>
< intent-filter>
< /intent-filter>
< /activity>
復(fù)制代碼第二種方式,用類名跳轉(zhuǎn)。
Intent負(fù)責(zé)對(duì)應(yīng)用中一次操作的動(dòng)作、動(dòng)作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述, 負(fù)責(zé)找到對(duì)應(yīng)的組件,將 Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。Intent在這里起著實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的解耦作用。
Intent傳遞過(guò)程中,要找到目標(biāo)消費(fèi)者(另一個(gè)Activity,IntentReceiver或Service),也就是Intent的響應(yīng)者。
Java代碼 package com.Android;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
public class FormStuff extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.formstuff);
final ImageButton button = (ImageButton) findViewById(R.id.android_button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 用類名跳轉(zhuǎn),需要在AndroidManifest.xml中申明activity
Intent intent = new Intent(FormStuff.this, HelloTabWidget.class);
startActivity(intent);
}
});
}
復(fù)制代碼Xml代碼
package="com.Android" android:versionCode="1" android:versionName="1.0">
< intent-filter>
< /intent-filter>
< /activity>
< !--申明activity-->
復(fù)制代碼一些Intent的常用發(fā):
Java代碼 顯示網(wǎng)頁(yè)
1. Uri uri = Uri.parse("http://google.com");
2. Intent it = new Intent(Intent.ACTION_VIEW, uri);
3. startActivity(it);
顯示地圖
1. Uri uri = Uri.parse("geo:38.899533,-77.036476");
2. Intent it = new Intent(Intent.ACTION_VIEW, uri);
3. startActivity(it);
4. //其他 geo URI 範(fàn)例
5. //geo:latitude,longitude
6. //geo:latitude,longitude?z=zoom
7. //geo:0,0?q=my+street+address
8. //geo:0,0?q=business+near+city
9. //google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom
路徑規(guī)劃
1. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat startLng&daddr=endLat endLng&hl=en");
2. Intent it = new Intent(Intent.ACTION_VIEW, uri);
3. startActivity(it);
4. //where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456
打電話
1. //叫出撥號(hào)程序
2. Uri uri = Uri.parse("tel:0800000123");
3. Intent it = new Intent(Intent.ACTION_DIAL, uri);
4. startActivity(it);
1. //直接打電話出去
2. Uri uri = Uri.parse("tel:0800000123");
3. Intent it = new Intent(Intent.ACTION_CALL, uri);
4. startActivity(it);
5. //用這個(gè),要在 AndroidManifest.xml 中,加上
6. //<uses-permission id="android.permission.CALL_PHONE" />
傳送SMS/MMS
1. //調(diào)用短信程序
2. Intent it = new Intent(Intent.ACTION_VIEW, uri);
3. it.putExtra("sms_body", "The SMS text");
4. it.setType("vnd.android-dir/mms-sms");
5. startActivity(it);
1. //傳送消息
2. Uri uri = Uri.parse("smsto://0800000123");
3. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
4. it.putExtra("sms_body", "The SMS text");
5. startActivity(it);
1. //傳送 MMS
2. Uri uri = Uri.parse("content://media/external/images/media/23");
3. Intent it = new Intent(Intent.ACTION_SEND);
4. it.putExtra("sms_body", "some text");
5. it.putExtra(Intent.EXTRA_STREAM, uri);
6. it.setType("image/png");
7. startActivity(it);
傳送 Email
1. Uri uri = Uri.parse("mailto:xxx@abc.com");
2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
3. startActivity(it);
1. Intent it = new Intent(Intent.ACTION_SEND);
2. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
3. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
4. it.setType("text/plain");
5. startActivity(Intent.createChooser(it, "Choose Email Client"));
1. Intent it=new Intent(Intent.ACTION_SEND);
2. String[] tos={"me@abc.com"};
3. String[] ccs={"you@abc.com"};
4. it.putExtra(Intent.EXTRA_EMAIL, tos);
5. it.putExtra(Intent.EXTRA_CC, ccs);
6. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
7. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
8. it.setType("message/rfc822");
9. startActivity(Intent.createChooser(it, "Choose Email Client"));
1. //傳送附件
2. Intent it = new Intent(Intent.ACTION_SEND);
3. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
4. it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
5. sendIntent.setType("audio/mp3");
6. startActivity(Intent.createChooser(it, "Choose Email Client"));
播放多媒體
Uri uri = Uri.parse("file:///sdcard/song.mp3");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
it.setType("audio/mp3");
startActivity(it);
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
Market 相關(guān)
1. //尋找某個(gè)應(yīng)用
2. Uri uri = Uri.parse("market://search?q=pname:pkg_name");
3. Intent it = new Intent(Intent.ACTION_VIEW, uri);
4. startActivity(it);
5. //where pkg_name is the full package path for an application
1. //顯示某個(gè)應(yīng)用的相關(guān)信息
2. Uri uri = Uri.parse("market://details?id=app_id");
3. Intent it = new Intent(Intent.ACTION_VIEW, uri);
4. startActivity(it);
5. //where app_id is the application ID, find the ID
6. //by clicking on your application on Market home
7. //page, and notice the ID from the address bar
1. Uri uri = Uri.fromParts("package", strPackageName, null);
2. Intent it = new Intent(Intent.ACTION_DELETE, uri);
3. startActivity(it);
android常用界面切換效果;
Activity的切換動(dòng)畫指的是從一個(gè)activity跳轉(zhuǎn)到另外一個(gè)activity時(shí)的動(dòng)畫。
{它包括兩個(gè)部分:
一部分是第一個(gè)activity退出時(shí)的動(dòng)畫;
另外一部分時(shí)第二個(gè)activity進(jìn)入時(shí)的動(dòng)畫;
在Android的2.0版本之后,有了一個(gè)函數(shù)來(lái)幫我們實(shí)現(xiàn)這個(gè)動(dòng)畫。這個(gè)函數(shù)就是overridePendingTransition
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.SplashScreen);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent mainIntent = new Intent(SplashScreen.this, AndroidNews.class);
SplashScreen.this.startActivity(mainIntent);
SplashScreen.this.finish();
overridePendingTransition(R.anim.mainfadein,
R.anim.splashfadeout);
}
}, 3000);
}
上面的代碼只是閃屏的一部分。
getWindow (). setWindowAnimations ( int );
getWindow (). setWindowAnimations ( int );
這可沒有上個(gè)好但是也可以 。
實(shí)現(xiàn)淡入淡出的效果1
overridePendingTransition(R.anim.splash_screen_fade, R.anim.splash_screen_hold);
實(shí)現(xiàn)淡入淡出的效果2
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
由左向右滑入的效果
overridePendingTransition(Android.R.anim.slide_in_left,android.R.anim.slide_out_right);
實(shí)現(xiàn)zoomin和zoomout,即類似iphone的進(jìn)入和退出時(shí)的效果
overridePendingTransition(R.anim.zoomin, R.anim.zoomout);
overridePendingTransition(R.anim.zoomin, R.anim.zoomout);
新建zoomin.xml文件
Android:interpolator="@android:anim/decelerate_interpolator">
Android:fromYScale="2.0" android:toYScale="1.0"
Android:pivotX="50%p" android:pivotY="50%p"
Android:duration="@android:integer/config_mediumAnimTime" />
新建zoomout.xml文件
Android:interpolator="@android:anim/decelerate_interpolator"
Android:zAdjustment="top">
Android:fromYScale="1.0" android:toYScale=".5"
Android:pivotX="50%p" android:pivotY="50%p"
Android:duration="@android:integer/config_mediumAnimTime" />
Android:duration="@android:integer/config_mediumAnimTime"/>
|