有些定制化的安卓板,有时候往往不止一个显示屏,从安卓4.2开始就有多屏的概念。
1.获取当前系统所有屏幕信息:
val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val displays: Array<Display> = displayManager.displays
//获取屏幕个数
val screenCount: Int = displays.size
Log.e("TAG", "screenCount======${screenCount}")
//循环获取所有屏幕信息
for (display in displays) {
val displayId = display.displayId
val displayName = display.name
val displayWidth = display.width
val displayHeight = display.height
Log.e("TAG", "displayId======${displayId}")
Log.e("TAG", "displayName======${displayName}")
Log.e("TAG", "displayWidth======${displayWidth}")
Log.e("TAG", "displayHeight======${displayHeight}")
}
2.关于多屏,需要引进一个叫做 Presentation的东西, Presentation 是扩展自 dialog.相当于一个升级版的弹窗,其实还是在同一个activity里面完成的,两个屏幕里面的内容,可以通过同一个activity进行控制和相关数据变动展示。在副屏上显示不同内容。它的显示内容是依附在主屏的Activity上的,如果Activity被销毁Presentation也不会再显示,多屏也是支持的,接下来看我怎么操作多屏。
比如我有三个屏:分别为一个主屏以及两个副屏,先创建两个Presentation
package com.example.test;
import android.app.Presentation;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.view.Display;
import androidx.annotation.RequiresApi;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
public class BuiltInPresentation extends Presentation {
public BuiltInPresentation(Context outerContext, Display display) {
super(outerContext, display);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置内置屏幕的布局和内容
setContentView(R.layout.disactivity);
}
}
package com.example.test;
import android.app.Presentation;
import android.content.Context;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.view.Display;
import android.widget.VideoView;
import androidx.annotation.RequiresApi;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
public class BuiltInPresentation2 extends Presentation {
public BuiltInPresentation2(Context outerContext, Display display) {
super(outerContext, display);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置内置屏幕的布局和内容
setContentView(R.layout.disactivity2);
}
}
3.我们继续看主Activity
package com.example.test
import android.annotation.SuppressLint
import android.content.Context
import android.hardware.display.DisplayManager
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.Display
import android.widget.SeekBar
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*
class MainActivity : AppCompatActivity() {
private var builtInPresentation: BuiltInPresentation? = null
private var builtInPresentation2: BuiltInPresentation2? = null
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val displayManager =
getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val displays: Array<Display> = displayManager.displays
for (display in displays) {
val displayId = display.displayId
val displayName = display.name
val displayWidth = display.width
val displayHeight = display.height
Log.e("TAG", "displayId======${displayId}")
Log.e("TAG", "displayName======${displayName}")
Log.e("TAG", "displayWidth======${displayWidth}")
Log.e("TAG", "displayHeight======${displayHeight}")
val screenCount: Int = displays.size
Log.e("TAG", "screenCount======${screenCount}")
}
builtInPresentation = BuiltInPresentation(this, displays[1])
builtInPresentation!!.show()
builtInPresentation2 = BuiltInPresentation2(this, displays[2])
builtInPresentation2!!.show()
}
override fun onDestroy() {
super.onDestroy()
// 在Activity销毁时,确保隐藏和释放Presentation
if (builtInPresentation != null) {
builtInPresentation!!.dismiss()
builtInPresentation = null
}
if (builtInPresentation2 != null) {
builtInPresentation2!!.dismiss()
builtInPresentation2 = null
}
}
}
到这里,你们大概应该都看懂了,我直接在主activity里面调用两个Presentation类,传入不同的屏信息,设置不同的屏内容。这里需要注意你的主屏是第几个,否则有可能不生效!一般的主屏都是displays[0],就是主activity显示的界面。