李大仁 2019-06-26
本项目使用Android Studio 3.0.1作为开发工具,参照传智播客教材《Android项目实战——博学谷》
可参照落萚简书文集——Android安全卫士开发笔记,里面详细讲述过项目的创建以及上传Github,在此不再赘述
自适应图标为 Android O 新增的一种全新应用图标样式,具体可以参照
Google 设计师兼开发者 Nick Butcher 的以下三篇文章:
Understanding Android Adaptive Icons
Designing Adaptive Icons
Implementing Adaptive Icons
英文不好的朋友可以直接看国内译者 HarveyJanson 的文章:
Android O 自适应图标的意义何在?Google 设计师给你答案 | 科普
设计自适应图标
实现自适应图标
但最好还是多看官方文档,而且看英文版的,因为新的内容经常还未被汉化,于是会出现同一网址不同语言显示的完全不是同个东西的窘境
本人参照了 Adaptive Icons ,Create App Icons with Image Asset Studio。
首先把设计好的前景图和背景图放置在项目中,本人将这两张图片放置在了 drawable 目录下,然后在 res 目录 右键-> New -> Image Asset
然后在 Icon Type中选择 Launcher Icons (Adaptive and Legacy),在下方的 Foreground Layer 选项卡中的 Asset Type 选中 Image ,在 Path 选择项目中的图片路径,同理设置背景图片,为了兼容低版本的系统,Image Asset Studio 还会生成适用于低版本的图片,然后根据各自需求调整缩放等参数即完成应用图标的设置。




首先同理把欢迎界面的图片导入到drawable目录下,在导入时 Android Studio 会提示如下

具体本人尚未弄明白,待理解后会重新补全本部分内容,在此本人选了第一个
然后创建一个包名为activity的包,在activity下创建SplashActivity

此时会发现 R 报红,只需要将光标锁定到R之后即会提示需要导入R包,如未提示,则手动敲击 Alt+Enter 选中 import class 即可导入

再而处理代码部分
package cn.edu.lt.android.boxueguapp.activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
import cn.edu.lt.android.boxueguapp.MainActivity;
import cn.edu.lt.android.boxueguapp.R;
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
//设置此界面为
// 竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
init();
}
private void init() {
TextView tv_version = (TextView)findViewById(R.id.tv_version);
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
tv_version.setText("V" + packageInfo.versionName);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
tv_version.setText("V");
}
//利用timer让此界面延迟3秒后跳转,timer有一个线程,该线程不断执行task
Timer timer = new Timer();
//TimerTask实现runnable接口,TimerTask类表示在一个指定时间内执行的task
TimerTask timerTask = new TimerTask() {
@Override
public void run() {//发送intent实现页面跳转,第一个参数为当前页面的context,第二个参数为要跳转的主页
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
SplashActivity.this.finish();//跳转后关闭当前欢迎页面
}
};
timer.schedule(timerTask,3000);//调度执行timerTask,第二个参数传入延迟时间(毫秒)
}
}创建 Activity 时同时自动创建了一个布局文件,首先修改为 RelativeLayout 布局
具体代码如下:
<?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:background="@drawable/launch_bg">
<TextView
android:id="@+id/tv_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textSize="14sp"
android:layout_centerInParent="true"/><!--显示版本号-->
</RelativeLayout>最后在清单文件 AndroidManifest.xml 中配置欢迎界面,将应用入口修改为欢迎界面,再去除 ActionBar 效果
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.edu.lt.android.boxueguapp">
<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/Theme.AppCompat.NoActionBar">
<!--原为android:theme="@style/AppTheme"--><!--去除ActionBar标题栏-->
<activity android:name=".MainActivity">
</activity>
<activity android:name=".activity.SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<div class="panel-body" style="height: 300px; width: 100%; overflow: auto;" data-platform-scroll="&q
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="icons/apple-touch-icon-114x114-precom