安卓多屏异显

有些定制化的安卓板,有时候往往不止一个显示屏,从安卓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显示的界面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值