目录
一、前言
二、添加启动图
三、启动图属性
四、启动图布局
五、核心代码
六、 MainActivity
七、结束语
一、前言
最近流行摆地摊,同事半开玩笑地说,疫情下IT行业不景气,咱们一起摆地摊卖编程葵花宝典去吧,肯定大赚一笔。说实在的现在各行各业都不太好,倒闭的公司好多,这个时候我们只有不断地提高自己的技术水平,让自己成为IT行业的佼佼者。闲话不多说了,接下来给安卓小白带来启动页的适配,ReactNative和安卓原生都适用。
二、添加启动图
在res->mipmap下添加适配各种手机的启动图,图片名字叫launch。
三、启动图属性
在res->values->styles.xml中添加如下代码。
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:windowIsTranslucent">true</item>
<item name="android:textColor">#000000</item>
</style>
<style name="SplashScreen_SplashAnimation">
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
<style name="SplashScreen_SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowAnimationStyle">@style/SplashScreen_SplashAnimation</item>
</style>
<style name="SplashScreen_Fullscreen" parent="SplashScreen_SplashTheme">
<item name="android:windowFullscreen">true</item>
</style>
</resources>
四、启动图布局
在res->layout->launch_screen.xml中添加如下代码。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/launch">
</LinearLayout>
五、核心代码
由于RN默认启动的页面是MainActivity,如果修改启动Activity会出现无法启动的错误。这里利用Dialog在MainActivity弹出,5秒后再关闭实现的启动图效果。如果有更好的方法,欢迎留言,谢谢。
package com.wisdomanyun;
import android.app.Activity;
import android.app.Dialog;
import android.os.Build;
import java.lang.ref.WeakReference;
/**
* 启动屏
*/
public class SplashScreen {
private static Dialog mSplashDialog;
private static WeakReference<Activity> mActivity;
/**
* 打开启动屏
*/
public static void show(final Activity activity, final int themeResId) {
if (activity == null) return;
mActivity = new WeakReference<Activity>(activity);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (!activity.isFinishing()) {
mSplashDialog = new Dialog(activity, themeResId);
mSplashDialog.setContentView(R.layout.launch_screen);
mSplashDialog.setCancelable(false);
if (!mSplashDialog.isShowing()) {
mSplashDialog.show();
}
}
}
});
}
/**
* 打开启动屏
*/
public static void show(final Activity activity, final boolean fullScreen) {
int resourceId = fullScreen ? R.style.SplashScreen_Fullscreen : R.style.SplashScreen_SplashTheme;
show(activity, resourceId);
}
/**
* 打开启动屏
*/
public static void show(final Activity activity) {
show(activity, false);
}
/**
* 关闭启动屏
*/
public static void hide(Activity activity) {
if (activity == null) {
if (mActivity == null) {
return;
}
activity = mActivity.get();
}
if (activity == null) return;
final Activity _activity = activity;
_activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (mSplashDialog != null && mSplashDialog.isShowing()) {
boolean isDestroyed = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
isDestroyed = _activity.isDestroyed();
}
if (!_activity.isFinishing() && !isDestroyed) {
mSplashDialog.dismiss();
}
mSplashDialog = null;
}
}
});
}
}
六、 MainActivity
package com.wisdomanyun;
import android.app.Activity;
import android.os.Bundle;
import com.facebook.react.ReactActivity;
public class MainActivity extends ReactActivity {
/**
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "WisdomAnYun";
}
@Override
protected void onCreate(Bundle savedInstanceState) {
SplashScreen.show(this); // 打开启动图
final Activity activity = this;
Thread myThread = new Thread() {//创建子线程
@Override
public void run() {
try {
sleep(5000);//使程序休眠五秒
SplashScreen.hide(activity);//关闭启动图
} catch (Exception e) {
e.printStackTrace();
}
}
};
myThread.start();//启动线程
super.onCreate(savedInstanceState);
}
}
七、 结束语
做iOS开发已经快5年了,一直在小厂前线战斗,都是打一些局部战争,整体布局和架构什么的都是使用大厂的,一直困于业务逻辑的实现, 想挣脱出来,却越陷越深,我自己都没有想到自己学习RN开发后,竟然会搞起安卓来。建议大家还是去大厂比较好,可以搞一下架构,或者研究某一块东西,这样会比较深入,就不会一直停留在应用层面,出现个问题,除了百度还可以阅读源码,知道问题真正出现哪里,最终把bug都消灭掉,这才是我们技术员该追求的。
关注公众号,查看更多内容.jpg
网友评论