1.当fullscreen的时候,还需要status的时候,我们使用普通的activity主题,然后使用如下方法:
1 2 3 4 5 6
| private void showStatusBar() { WindowManager.LayoutParams attrs = getWindow().getAttributes(); attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; getWindow().setAttributes(attrs); }
|
2.高德地图,缩放级别设置:
1 2
| aMap.moveCamera(CameraUpdateFactory.zoomTo(15));
|
3.遇到8.0的透明主题崩溃问题:
1
| Only fullscreen activities can request orientation终极解决方法
|
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 39 40 41 42 43 44
| @Override protected void onCreate(Bundle savedInstanceState) { if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O && isTranslucentOrFloating()) { boolean result = fixOrientation(); } super.onCreate(savedInstanceState); }
private boolean fixOrientation(){ try { Field field = Activity.class.getDeclaredField("mActivityInfo"); field.setAccessible(true); ActivityInfo o = (ActivityInfo)field.get(this); o.screenOrientation = -1; field.setAccessible(false); return true; } catch (Exception e) { e.printStackTrace(); } return false; }
private boolean isTranslucentOrFloating(){ boolean isTranslucentOrFloating = false; try { int [] styleableRes = (int[]) Class.forName("com.android.internal.R$styleable").getField("Window").get(null); final TypedArray ta = obtainStyledAttributes(styleableRes); Method m = ActivityInfo.class.getMethod("isTranslucentOrFloating", TypedArray.class); m.setAccessible(true); isTranslucentOrFloating = (boolean)m.invoke(null, ta); m.setAccessible(false); } catch (Exception e) { e.printStackTrace(); } return isTranslucentOrFloating; }
@Override public void setRequestedOrientation(int requestedOrientation) { if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O && isTranslucentOrFloating()) { return; } super.setRequestedOrientation(requestedOrientation); }
|
参考
Android 全屏 但是有状态栏(任务栏)
Only fullscreen activities can request orientation终极解决方法