问题
接入 SDK 后拉起支付宝支付的时候,游戏从横屏画面切换到 SDK 的竖屏画面;这时候点击后退返回,会发现游戏虽然是横屏显示,但是触控区域与显示区域对应不上,经过仔细测试发现触控区域横向缩小了。
环境
解决过程
横竖屏设置
刚开始的时候怀疑是旋转方向被拉起的 SDK 支付页面之类的改动了,导致游戏本身的触控区域错误
1
2
3
4
5
6
7
8
9
|
@Override
protected void onResume() {
// 设置为横屏
if(getRequestedOrientation()!=ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
super.onResume();
}
|
打包测试发现无效
分辨率设置
上网搜索后发现有可能是触控区域的分辨率出问题了,虽然游戏显示为正常的横屏,但是触控区域的表现是竖屏。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
private int width;
private int height;
@Override
protected void onCreate(Bundle paramBundle) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(paramBundle);
getWindow().takeSurface(null);
getWindow().setFormat(PixelFormat.RGBX_8888);
this.mUnityPlayer = new UnityPlayer(this);
setContentView(this.mUnityPlayer);
this.mUnityPlayer.requestFocus();
saveWidthHeight();
}
@Override
protected void onResume() {
super.onResume();
setLayoutParams();
this.mUnityPlayer.resume();
}
private void saveWidthHeight() {
if (Build.VERSION.SDK_INT >= 26) {
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
display.getRealMetrics(dm);
width = dm.widthPixels;
height = dm.heightPixels;
}
}
private void setLayoutParams() {
if (Build.VERSION.SDK_INT >= 26) { //android 8.0
mUnityPlayer.getView().getLayoutParams().width = width;
mUnityPlayer.getView().getLayoutParams().height = height;
}
}
|
会有一个问题,游戏之前未设置适配刘海屏,显示区域未撑满到刘海区域,这样修改后有一部分内容显示到屏幕外,而刘海区域则是空着的。
尝试使用 AndroidManifest.xml 设置刘海属性无效,最后发现只有在代码中设置刘海属性有效。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends UnityPlayerActivity{
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
{
try
{
Window window = getWindow();
//设置页面全屏显示
WindowManager.LayoutParams lp = window.getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
//设置页面延伸到刘海区显示
window.setAttributes(lp);
}
catch (Exception e)
{
Log.e("activity", "not support layoutInDisplayCutoutMode!");
}
}
else
{
Log.w("activity", "not support layoutInDisplayCutoutMode!");
}
}
}
|