问题描述
在之前
解决安卓分屏模式下分辨率异常的问题时,发现了在弹出窗口模式下背景Splash比游戏的窗口大的问题,如图:
希望可以关闭或者隐藏背景板
尝试思路
以下是探索过程不是解决办法可以跳过
以下是探索过程不是解决办法可以跳过
以下是探索过程不是解决办法可以跳过
由于只能看出来这是splash,换图测试一下确认是splash,所以就按照弹出窗口没有关闭splash去寻找解决方案,于是找到了这个
stackoverflow的一个相关问题
然后看了一眼AndroidManifest.xml
,发现:
1 2 3 4 5 6 7 8 9 10
| <application android:label="@string/app_name" android:icon="@drawable/icon" android:resizeableActivity="false" android:isGame="true" android:hardwareAccelerated="true" android:extractNativeLibs="true" android:name="com.epicgames.ue4.GameApplication" android:requestLegacyExternalStorage="true" android:hasCode="true"> <activity android:name="com.epicgames.ue4.SplashActivity" android:label="@string/app_name" android:theme="@style/UE4SplashTheme" android:launchMode="singleTask" android:screenOrientation="sensorLandscape" android:debuggable="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.epicgames.ue4.GameActivity" android:label="@string/app_name" android:theme="@style/UE4SplashTheme" android:configChanges="mcc|mnc|uiMode|density|screenSize|smallestScreenSize|screenLayout|orientation|keyboardHidden|keyboard" android:resizeableActivity="false" android:launchMode="singleTask" android:screenOrientation="sensorLandscape" android:debuggable="true"> <meta-data android:name="android.app.lib_name" android:value="UE4" /> </activity>
|
哎嘿,这不就是两个Activity嘛,想想办法关了它
于是尝试在GameActivity.Java.template的各种地方按照Stack Overflow那个问题里的方案尝试,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12
| @Override public void onMultiWindowModeChanged (boolean isInMultiWindowMode) { super.onMultiWindowModeChanged(isInMultiWindowMode); Log.debug("onMultiWindowModeChanged : isInMultiWindowMode: " + String.valueOf(isInMultiWindowMode)); PackageManager pm = getPackageManager(); ComponentName componentName = new ComponentName(this, SplashActivity.class); Log.debug(componentName.getClassName()); Log.debug(componentName.getPackageName()); Log.debug(String.valueOf(pm.getComponentEnabledSetting(componentName))); pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); }
|
打包测试发现pm.setComponentEnabledSetting
会导致崩溃,于是又用Android Studio调试了一下,确认ComponentName的创建是没有问题的,问题就是setComponentEnabledSetting这一步,但是由于本人完全没接触过安卓开发相关,只能试图从搜索引擎查找一下可能的问题
然后就陷入了僵局,但是有看到一个地方说要在Activity的地方加一个android:exported
,加上之后还是没有用,但是在看XML中的SplashActivity定义的时候发现:android:theme="@style/UE4SplashTheme"
由于我在看这个文件的时候,是用的Android Studio,并打开了我build的gradle,我试图按了一下F12,他就跳转过去了= =
到了Engine\Build\Android\Java\res\values-land\styles.xml这个文件(因为我们只改了landscape的splash)并看到了如下代码
1 2 3 4 5 6 7 8 9 10 11 12
| <?xml version="1.0" encoding="utf-8"?> <resources>
<style name="UE4BaseTheme" parent = "@android:style/Theme.Black.NoTitleBar.Fullscreen" />
<style name="UE4SplashTheme" parent = "UE4BaseTheme"> <item name="android:windowBackground">@drawable/splashscreen_l</item> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> </style>
</resources>
|
长得好像html啊- -然后看看这几个单词,好像就是splash的相关配置啊!windowNoTitle
就是不要标题,windowFullscreen
就是全屏
我试着在IDE里敲window,就跟出来了一个windowClipToOutline
= =啊这,Clip,裁剪,是不是就是把SplashActivity给裁减了呢
加上去试了一下-=-真的可以耶……
解决方案
在Engine\Build\Android\Java\res
目录下的values-land
和values-port
里面的styles.xml
文件中给UE4SplashTheme的style加上
1
| <item name="android:windowClipToOutline">true</item>
|
就可以解决问题了
总结
遇到安卓问题就快去西天(划掉)请一位安卓开发的带佬!不要浪费自己的头发(泪