Android进阶之路 - 启动页的详细使用(包含首次进入后,出现短暂空白界面的解决方案)

Welcom页面,Splash页面,代表的意义相同都是“启动页面”,除了个别的企业app或者政府app的话,都会用到本章的知识,请努力掌握!

启动页 :引导页之后的一个跳转界面,且每次登陆app都会进行展示,不同于引导页,因为引导页仅展示一次!

最后有一个注意点,是解决进入启动页视图没加载出来,出现短暂空白页面的处理方式。

Effect :

Android进阶之路 - 启动页的详细使用(包含首次进入后,出现短暂空白界面的解决方案)_第1张图片

涉及知识:
1.Android原生的CountDownTimer倒计时功能
2.Handler机制,可通过下面的第一个链接学习,是一个延迟功能

本章使用到的知识点链接:

Android进阶之路 - Splash、Welcome欢迎页面的初始使用(一)
http://blog.csdn.net/qq_20451879/article/details/54695435

Android进阶之路 - CountDownTimer倒计时的分秒实现
http://blog.csdn.net/qq_20451879/article/details/71111024

注意:
1.右上边的背景可使用UI切图,也可以shape自己画
2.如ImageView的图片显示不全,在ImageView中加入下面这行属性

android:scaleType="fitXY"

3.CountDownTimer在onDestroy()生命周期内的销毁,减少内存开销

如果有需求,可以通过以下链接下载此Demo
http://download.csdn.net/detail/qq_20451879/9918986

AndroidMainfest :
“设置GuideActivity为第一个启动的主Activity,同时注意注册MainActivity”


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yl.shape.shape">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">
        <activity android:name="com.yl.shape.guide.GuideActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            intent-filter>
        activity>


        <activity android:name="com.yl.shape.guide.MainActivity"/>
    application>

manifest>

GuideActivity :

package com.yl.shape.guide;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

import com.yl.shape.shape.R;

/**
 * Created by YongLiu on 2017/8/2.
 */

public class GuideActivity extends AppCompatActivity {

    private TextView mTimer;
    private CountDownTimer countDownTimer;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guide);

        mTimer = (TextView) findViewById(R.id.tv_time);


 //    new Handler().postDelayed(new Runnable() {
 //         @Override
 //          public void run() {
 //               startActivity(new //Intent(GuideActivity.this,MainActivity.class));
 //               finish();
 //          }
 //       },3000);



        mTimer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(GuideActivity.this,MainActivity.class));
                finish();
            }
        });

        countDownTimer = new CountDownTimer(4000, 1000){

            @Override
            public void onTick(long millisUntilFinished) {
                mTimer.setText(millisUntilFinished/1000 + "秒");
                mTimer.setTextColor(Color.WHITE);
            }

            @Override
            public void onFinish() {
                startActivity(new Intent(GuideActivity.this,MainActivity.class));
                finish();
            }
        };

        countDownTimer.start();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        countDownTimer.cancel();
    }
}

GuideActivity Xml :


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/background"
        android:id="@+id/image"
        android:scaleType="fitXY"
        />
    <TextView
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:background="@drawable/back"
        android:id="@+id/tv_time"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:text=""
        android:gravity="center"
        />

RelativeLayout>

MainActivity :

package com.yl.shape.guide;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.yl.shape.shape.R;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

MainActivity Xml :


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.yl.shape.shape.com.yl.shape.guide.MainActivity">


    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="Baby,GO GO GO !"
        android:textColor="#e322e1"
    />

LinearLayout>

解决问题 :

首次进入启动页,没有直接显示UI ,而是进入短暂空白,之后再跳出我们的UI

解决方式:

  • 在value 下的 style(加入以下代码)
  
  • 在AndroidManfest下,找到启动页的Activity(写出如下代码)
 <activity
            android:name=".home.activity.GuideActivity"
            android:theme="@style/AppTheme"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            intent-filter>
        activity>

在此时问题已经解决了,主要原因在于Theme是在App启动之后加载,而Activity中的背景图是在Activity启动之后加载,所以之前在App启动之后会看到Theme的默认背景。

简单言之,App的Theme属性在App启动时就加载,而背景图是在所依赖的Activity启动时才绘制加载,App的启动当然优先于Activity了,问题解决!

你可能感兴趣的:(#,项目开发知识点归纳)