前言
Android 从4.2开始支持双屏显示,支持版本为17以上。
Android 双屏原理说白了,自定义一个Presentation类,Android 的标准实现是使用 API Presentation 来实现异显的功能。
public class Presentation extends Dialog {
}
从源码看,Presentation继承Dialog,可以看做一个升级版的弹窗。
正文
SecondScreen
public class SecondScreen extends Presentation {
public SecondScreen(Context outerContext, Display display) {
super(outerContext, display);
//getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
Log.d(TAG, "SecondScreen: ");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
@Override
protected void onStop() {
super.onStop();
}
@Override
public void dismiss() {
super.dismiss();
}
}
添加到副屏
# 初始化displayManager
displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
# 显示
Display[] displays = mDisplayManager.getDisplays();
Log.d(TAG, "onResume displays.length : " + (null != displays ? displays.length : 0));
if (null != displays && displays.length >1) {
//避免重复创建
if (null == mSecondScreen) {
mSecondScreen = new SecondScreen(MainActivity.this, displays[1]);
}
//避免重复显示
if (!mSecondScreen.isShowing()) {
mSecondScreen.show();
}
}
我试过,若果displays.lenght 为1时,如果
mSecondScreen = new SecondScreen(MainActivity.this, displays[0]);
会提示错误:
android.view.WindowManager$InvalidDisplayException: Unable to add window android.view.ViewRootImpl$W@62f0597 -- the specified display can not be found
也就说,当displays.length大于1(至少是2)时,才可以显示分屏。
一个屏可以显示多个Presentation ,也就是一层一层盖着,顶部显示的是最后显示的那个Presentation 。
参考文章
© 版权声明