一般有兩個(gè)方法:
公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出淇濱免費(fèi)做網(wǎng)站回饋大家。
1、切換賬號(hào)登錄,引導(dǎo)頁(yè)可以重新查看;
2、在手機(jī)“設(shè)置”的“應(yīng)用”中,點(diǎn)擊相應(yīng)的應(yīng)用后,點(diǎn)擊“清除數(shù)據(jù)”。這樣的話就得重新登錄了。
第二種方法徹底,但某些應(yīng)用謹(jǐn)慎使用,因?yàn)榭赡苡械膽?yīng)用之前保存的數(shù)據(jù)就沒(méi)了,除非這款應(yīng)用可以同步相關(guān)數(shù)據(jù)。
考慮上面的情況,你也可以用第一種方法,切換后再切換回來(lái)。當(dāng)然,我一般用第二種方法,快...
基本上現(xiàn)在所有的應(yīng)用都會(huì)有一個(gè)歡迎界面,在歡迎界面對(duì)應(yīng)用做一個(gè)整體的介紹,然后在跳入到主界面,這次要說(shuō)的這個(gè)引導(dǎo)頁(yè)就是帶翻頁(yè)的引導(dǎo)頁(yè)。效果如下所示
概要實(shí)現(xiàn)
主要分為兩部分功能,一個(gè)是翻頁(yè)效果,一個(gè)是頁(yè)面位置指示器。為了實(shí)現(xiàn)翻頁(yè)效果我采用系統(tǒng)自帶的ViewPager對(duì)象來(lái)實(shí)現(xiàn);頁(yè)面指示器則通過(guò)一個(gè)LinearLayout在其中放置相應(yīng)個(gè)數(shù)的圖片,然后根據(jù)頁(yè)面的滑動(dòng)動(dòng)態(tài)修改各個(gè)圖片的資源。布局文件如下所示
復(fù)制代碼
1 RelativeLayout xmlns:android=""
2 xmlns:tools=""
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 tools:context=".MainActivity"
6
7 android.support.v4.view.ViewPager
8 xmlns:android=""
9 android:id="@+id/welcome_pager"
10 android:layout_width="match_parent"
11 android:layout_height="match_parent" /
12
13 !-- 圖片位置指示器 --
14 LinearLayout
15 android:id="@+id/director"
16 android:layout_width="match_parent"
17 android:layout_height="wrap_content"
18 android:gravity="center_horizontal"
19 android:orientation="horizontal"
20 android:layout_marginBottom="15dip"
21 android:layout_alignParentBottom="true"
22
23
24 ImageView
25 android:layout_width="wrap_content"
26 android:layout_height="wrap_content"
27 android:background="@drawable/pageindicator_on" /
28
29 ImageView
30 android:layout_width="wrap_content"
31 android:layout_height="wrap_content"
32 android:background="@drawable/pageindicator_off" /
33
34 ImageView
35 android:layout_width="wrap_content"
36 android:layout_height="wrap_content"
37 android:background="@drawable/pageindicator_off" /
38
39 ImageView
40 android:layout_width="wrap_content"
41 android:layout_height="wrap_content"
42 android:background="@drawable/pageindicator_off" /
43 /LinearLayout
44
45 /RelativeLayout
復(fù)制代碼
ViewPager
先來(lái)看下官方解釋:Layout manager that allows the user to flip left and right through pages of data.意思是說(shuō),Viewpage是一個(gè)允許用戶在多個(gè)頁(yè)面數(shù)據(jù)之間通過(guò)左滑或者右滑的方式切換頁(yè)面數(shù)據(jù)的布局管理器。
主要功能點(diǎn)有兩部分,數(shù)據(jù)適配器Adapter,和事件監(jiān)聽(tīng)器OnPageChangeListener。數(shù)據(jù)適配器用來(lái)管理這個(gè)ViewPager對(duì)象的顯示內(nèi)容,而OnPageChangeListener用來(lái)處理當(dāng)頁(yè)面切換的時(shí)候的行為動(dòng)作,我修改頁(yè)面指示器就是通過(guò)這個(gè)事件來(lái)完成的。
適配器
復(fù)制代碼
1 class pagerAdapter extends FragmentPagerAdapter{
2
3 public pagerAdapter(FragmentManager fm) {
4 super(fm);
5 }
6
7 @Override
8 public Fragment getItem(int arg0) {
9 //得到要顯示的對(duì)象并初始化圖片
10 WelcomeFragment fm = new WelcomeFragment();
11 fm.setImg(imgs.get(arg0));
12
13 return fm;
14 }
15
16 @Override
17 public int getCount() {
18 return imgs.size();
19 }
20
21 }
復(fù)制代碼
上面這段就是ViewPager要用的適配器了,其中imgs是一個(gè)id數(shù)組,存放了要在歡迎界面展示的圖片的id,WelcomeFragment是一個(gè)Fragment類(lèi),用來(lái)展示頁(yè)面內(nèi)容,這兩個(gè)代碼會(huì)在完整代碼中體現(xiàn)。兩個(gè)方法需要實(shí)現(xiàn),getCout,用來(lái)表示有多少個(gè)頁(yè)面;getItem,用來(lái)獲取指定位置的Pager對(duì)象。
imgs數(shù)組定義及實(shí)現(xiàn):
復(fù)制代碼
1 ListInteger imgs = null;
2 //初始化歡迎界面圖片數(shù)組
3 imgs = new ArrayListInteger();
4 imgs.add(R.drawable.help1);
5 imgs.add(R.drawable.help2);
6 imgs.add(R.drawable.help3);
7 imgs.add(R.drawable.help4);
復(fù)制代碼
WelcomeFragment類(lèi)定義
復(fù)制代碼
1 public class WelcomeFragment extends Fragment {
2
3 View view = null;
4 int imgId ;
5 @Override
6 public View onCreateView(LayoutInflater inflater, ViewGroup container,
7 Bundle savedInstanceState) {
8 view = inflater.inflate(R.layout.welcome_fragment, null);
9
10 ImageView fragmentVw = (ImageView) view.findViewById(R.id.welcome_Img);
11 fragmentVw.setBackgroundResource(imgId);
12 return view;
13 }
14
15 /**
16 * 為該Fragment設(shè)置顯示圖片
17 * */
18 public void setImg(int imgID){
19
20 imgId = imgID;
21 }
22 }
復(fù)制代碼
WelcomeFragment布局文件
復(fù)制代碼
1 FrameLayout xmlns:android=""
2 android:layout_width="match_parent"
3 android:layout_height="match_parent"
4
5 ImageView
6 android:id="@+id/welcome_Img"
7 android:contentDescription="welcome"
8 android:layout_width="match_parent"
9 android:layout_height="match_parent" /
10
11 /FrameLayout
復(fù)制代碼
事件監(jiān)聽(tīng)器OnPageChangeListener
這個(gè)監(jiān)聽(tīng)器用來(lái)監(jiān)聽(tīng)頁(yè)面切換事件,實(shí)現(xiàn)這個(gè)接口用來(lái)處理頁(yè)面切換時(shí),頁(yè)面指示器跟著改變狀態(tài)。實(shí)現(xiàn)代碼如下
復(fù)制代碼
1 /**
2 * 頁(yè)面切換的事件監(jiān)聽(tīng)器
3 * */
4 class pageChangeListener implements OnPageChangeListener{
5
6 /**
7 * 當(dāng)某一個(gè)頁(yè)面被選中的時(shí)候觸發(fā)
8 * */
9 @Override
10 public void onPageSelected(int arg0) {
11 int count = directorLayout.getChildCount();
12 /**
13 * 指示器自對(duì)象順序和頁(yè)面顯示順序一樣的設(shè)置為on,其余的設(shè)置為off
14 * */
15 for(int i=0;icount;i++){
16 ImageView iv = (ImageView) directorLayout.getChildAt(i);
17 if(i == arg0){
18 iv.setBackgroundResource(R.drawable.pageindicator_on);
19 }else{
20 iv.setBackgroundResource(R.drawable.pageindicator_off);
21 }
22 }
23 }
24
25 @Override
26 public void onPageScrolled(int arg0, float arg1, int arg2) {
27 // TODO Auto-generated method stub
28 }
29
30 @Override
31 public void onPageScrollStateChanged(int arg0) {
32 // TODO Auto-generated method stub
33 }
34 }
1 import android.app.Activity;
2 import android.content.Intent;
3 import android.content.SharedPreferences;
4 import android.content.SharedPreferences.Editor;
5 import android.os.Bundle;
6 import android.os.Handler;
7
8 /** 歡迎界面 */
9 public class WelcomeAct extends Activity {
10
11 private boolean isFirstIn = false;
12 private static final int TIME = 2000;
13 private static final int GO_HOME = 1000;
14 private static final int GO_GUIDE = 1001;
15
16 private Handler mHandler = new Handler() {
17 public void handleMessage(android.os.Message msg) {
18 switch (msg.what) {
19 // 跳入主界面
20 case GO_HOME:
21 goHome();
22 break;
23 // 跳入引導(dǎo)頁(yè)
24 case GO_GUIDE:
25 goGuide();
26 break;
27 }
28 };
29 };
30
31 @Override
32 protected void onCreate(Bundle savedInstanceState) {
33 super.onCreate(savedInstanceState);
34 setContentView(R.layout.welcome);
35 init();
36 }
37
38 private void init() {
39 SharedPreferences perPreferences = getSharedPreferences("jike",
40 MODE_PRIVATE);
41 isFirstIn = perPreferences.getBoolean("isFirstIn", true);
42 if (!isFirstIn) {
43 mHandler.sendEmptyMessageDelayed(GO_HOME, TIME);
44 } else {
45 mHandler.sendEmptyMessageDelayed(GO_GUIDE, TIME);
46 Editor editor = perPreferences.edit();
47 editor.putBoolean("isFirstIn", false);
48 editor.commit();
49 }
50 }
51
52 private void goHome() {
53 Intent i = new Intent(WelcomeAct.this, MainActivity.class);
54 startActivity(i);
55 finish();
56 }
57
58 private void goGuide() {
59 Intent i = new Intent(WelcomeAct.this, Guide.class);
60 startActivity(i);
61 finish();
62 }
63
64 }
1 import java.util.ArrayList;
2 import java.util.List;
3 import android.app.Activity;
4 import android.content.Intent;
5 import android.os.Bundle;
6 import android.support.v4.view.ViewPager;
7 import android.support.v4.view.ViewPager.OnPageChangeListener;
8 import android.view.LayoutInflater;
9 import android.view.View;
10 import android.view.View.OnClickListener;
11 import android.widget.Button;
12 import android.widget.ImageView;
13
14 /** 引導(dǎo)頁(yè) */
15 public class Guide extends Activity implements OnPageChangeListener {
16
17 private ViewPager vp;
18 private ViewPagerAdapter vpAdapter;
19 private ListView views;
20 private ImageView[] dots;
21 private int[] ids = { R.id.iv1, R.id.iv2, R.id.iv3 };
22 private Button start_btn;
23
24 @Override
25 protected void onCreate(Bundle savedInstanceState) {
26 super.onCreate(savedInstanceState);
27 setContentView(R.layout.guide);
28 initViews();
29 initDots();
30 }
31
32 private void initViews() {
33 LayoutInflater inflater = LayoutInflater.from(this);
34
35 views = new ArrayListView();
36 views.add(inflater.inflate(R.layout.one, null));
37 views.add(inflater.inflate(R.layout.two, null));
38 views.add(inflater.inflate(R.layout.three, null));
39
40 vpAdapter = new ViewPagerAdapter(views, this);
41 vp = (ViewPager) findViewById(R.id.viewpager);
42 vp.setAdapter(vpAdapter);
43 // 下標(biāo)從0開(kāi)始,所以第三個(gè)頁(yè)面是get(2)。
44 start_btn = (Button) views.get(2).findViewById(R.id.start_btn);
45 start_btn.setOnClickListener(new OnClickListener() {
46 @Override
47 public void onClick(View arg0) {
48 Intent i = new Intent(Guide.this, MainActivity.class);
49 startActivity(i);
50 finish();
51 }
52 });
53 vp.setOnPageChangeListener(this);
54 }
55
56 /** 循環(huán)設(shè)置點(diǎn) */
57 private void initDots() {
58 dots = new ImageView[views.size()];
59 for (int i = 0; i views.size(); i++) {
60 dots[i] = (ImageView) findViewById(ids[i]);
61 }
62 }
63
64 @Override /** 滑動(dòng)狀態(tài)改變的時(shí)候 */
65 public void onPageScrollStateChanged(int arg0) {
66 // TODO Auto-generated method stub
67 }
68
69 @Override /** 當(dāng)頁(yè)面被滑動(dòng)時(shí)候調(diào)用 */
70 public void onPageScrolled(int arg0, float arg1, int arg2) {
71 // TODO Auto-generated method stub
72 }
73
74 @Override /** 當(dāng)前新的頁(yè)面被選中時(shí)調(diào)用 */
75 public void onPageSelected(int arg0) {
76 for (int i = 0; i ids.length; i++) {
77 if (arg0 == i) {
78 // 亮點(diǎn)
79 dots[i].setImageResource(R.drawable.login_point_selected);
80 } else {
81 // 暗點(diǎn)
82 dots[i].setImageResource(R.drawable.login_point);
83 }
84 }
85 }
86
87 }
1 ?xml version="1.0" encoding="utf-8"?
2 RelativeLayout xmlns:android=""
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5
6 android.support.v4.view.ViewPager
7 android:id="@+id/viewpager"
8 android:layout_width="fill_parent"
9 android:layout_height="fill_parent"
10 android:background="#00000000"
11 /android.support.v4.view.ViewPager
12
13 !-- 底部三個(gè)點(diǎn) --
14 LinearLayout
15 android:id="@+id/ll"
16 android:layout_width="fill_parent"
17 android:layout_height="wrap_content"
18 android:layout_alignParentBottom="true"
19 android:gravity="center_horizontal"
20 android:orientation="horizontal"
21 !-- 選中點(diǎn) --
22 ImageView
23 android:id="@+id/iv1"
24 android:layout_width="wrap_content"
25 android:layout_height="wrap_content"
26 android:src="@drawable/login_point_selected" /
27 !-- 未選中點(diǎn) --
28 ImageView
29 android:id="@+id/iv2"
30 android:layout_width="wrap_content"
31 android:layout_height="wrap_content"
32 android:src="@drawable/login_point" /
33 !-- 未選中點(diǎn) --
34 ImageView
35 android:id="@+id/iv3"
36 android:layout_width="wrap_content"
37 android:layout_height="wrap_content"
38 android:src="@drawable/login_point" /
39 /LinearLayout
40
41 /RelativeLayout
因?yàn)樾枨笥凶鲩_(kāi)機(jī)引導(dǎo),所以簡(jiǎn)單的學(xué)習(xí)下這塊功能的流程,并簡(jiǎn)單的做個(gè)總結(jié)
主要參考文章:
做開(kāi)機(jī)引導(dǎo),主要要做到的效果就是 只有第一次使用的時(shí)候會(huì)打開(kāi),只打開(kāi)一次,當(dāng)執(zhí)行完開(kāi)機(jī)引導(dǎo)的流程之后,之后開(kāi)機(jī)都不會(huì)再展示
要實(shí)現(xiàn)開(kāi)機(jī)引導(dǎo),那么就一定是系統(tǒng)應(yīng)用,按照原理來(lái)說(shuō),需要兩個(gè)步驟,第一,需要引導(dǎo)頁(yè)的優(yōu)先級(jí)比LAUNCHER高。第二,需要流程完畢之后執(zhí)行某些操作讓?xiě)?yīng)用下次不會(huì)啟動(dòng)。
可以設(shè)置android:priority屬性,系統(tǒng)會(huì)判斷啟動(dòng)priority優(yōu)先級(jí)高的。
這樣配置之后,其它應(yīng)用的優(yōu)先級(jí)如果沒(méi)有設(shè)置的話默認(rèn)就是0,這樣就會(huì)優(yōu)先打開(kāi)引導(dǎo)頁(yè)。
自己可以在引導(dǎo)頁(yè)中寫(xiě)自己想要做的邏輯。當(dāng)執(zhí)行完所有邏輯之后,需要配置
這里主要做了設(shè)置Settings.Global.DEVICE_PROVISIONED和Settings.Secure.USER_SETUP_COMPLETE兩個(gè)參數(shù),還有PackageManager.setComponentEnabledSetting方法禁用組件
第一個(gè)參數(shù)是組件名
第二個(gè)參數(shù)是狀態(tài)
不可用狀態(tài):COMPONENT_ENABLED_STATE_DISABLED
可用狀態(tài):COMPONENT_ENABLED_STATE_ENABLED
默認(rèn)狀態(tài):COMPONENT_ENABLED_STATE_DEFAULT
第三個(gè)參數(shù)flags
DONT_KILL_APP或者0,0表示殺死包含該組件的app
運(yùn)行時(shí)會(huì)發(fā)現(xiàn)設(shè)置priority優(yōu)先級(jí)比LAUNCHER高,在開(kāi)機(jī)之后也會(huì)提示讓你選擇打開(kāi)應(yīng)用,而不是默認(rèn)打開(kāi)優(yōu)先級(jí)高的,關(guān)于這個(gè)問(wèn)題,可以參考這篇文章
只需要把應(yīng)用安裝到system/priv-app中,就能解決這個(gè)問(wèn)題。正常來(lái)說(shuō)一般系統(tǒng)應(yīng)用也是安裝在這么文件夾中,只是平時(shí)調(diào)試的時(shí)候會(huì)為了方便直接run,所以可能出現(xiàn)這個(gè)問(wèn)題。
將應(yīng)用安裝到該文件夾中可以使用這個(gè)命令,然后重啟
看了很多文章,都沒(méi)有講到為什么要設(shè)置這兩屬性,因?yàn)橐_(dá)成目的,我們只需要設(shè)置priority和調(diào)用setComponentEnabledSetting方法就行,為什么要設(shè)置這兩個(gè)參數(shù)?不設(shè)置會(huì)有什么影響。
其實(shí)簡(jiǎn)單來(lái)說(shuō),系統(tǒng)在其他地方有用到這兩個(gè)參數(shù),舉個(gè)簡(jiǎn)單的例子,我直接
去運(yùn)行程序,能夠很明顯的測(cè)出這種情況下按Home鍵沒(méi)反應(yīng),除此之外屏保也會(huì)不顯示。
所以這兩個(gè)參數(shù)還是需要在這個(gè)地方設(shè)為1的。
網(wǎng)頁(yè)標(biāo)題:android引導(dǎo)頁(yè),android啟動(dòng)頁(yè)廣告頁(yè)
本文網(wǎng)址:http://vcdvsql.cn/article0/dsdehio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、Google、品牌網(wǎng)站制作、外貿(mào)建站、企業(yè)網(wǎng)站制作、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)