如何获取屏幕尺寸

问题描述 投票:0回答:1

所以我有一个在 LinearLayout 中定义 ImageView 的应用程序。 ImageView 和 LinearLayout 的宽度和高度被指定为“match_parent”,并且 ImageView 看起来与屏幕的尺寸相同。但是,当我尝试获取屏幕的尺寸以创建位图并将其附加到 ImageView 时,高度与屏幕的高度匹配,但宽度稍微小于屏幕的宽度。我正在使用以下代码来获取宽度和高度。

    val width = resources.displayMetrics.widthPixels
    val height = resources.displayMetrics.heightPixels

还有这个:

windowManager.currentWindowMetrics.bounds.width()
windowManager.currentWindowMetrics.bounds.height()

但这需要 API 级别 30(我希望我的应用程序能够从 API 级别 24 运行),即使我确实将最低 API 级别增加到 30,也会给出不正确的宽度值。

如果我使用这个也会发生同样的事情:

    val width = windowManager.maximumWindowMetrics.bounds.width()
    val height = windowManager.maximumWindowMetrics.bounds.height()

这已被弃用:

windowManager.defaultDisplay

所以我不太确定如何获得正确的屏幕宽度。作为记录,创建位图的代码如下所示:

        val bitmap = Bitmap.createBitmap(width.toInt(), height.toInt(), Bitmap.Config.ARGB_8888)

我现在想知道(在发布问题之后)使用 ViewTreeObserver 来获取 ImageView 的尺寸(与屏幕大小相同)是否可行,但似乎应该有一种更简单的方法来做到这一点。

android bitmap imageview
1个回答
0
投票

这有效:

        val mainLayout: LinearLayout = findViewById(R.id.main_layout)
        mainLayout.viewTreeObserver.addOnGlobalLayoutListener(
        object : ViewTreeObserver.OnGlobalLayoutListener {
            override fun onGlobalLayout() {
                val imageView = findViewById<ImageView>(R.id.image_view)
                val width = imageView.width
                val height = imageView.height
                // do initialization
            }
        }
    )
}

这与使用 lambda 表达式是一样的:

        val mainLayout: LinearLayout = findViewById(R.id.main_layout)
        mainLayout.viewTreeObserver.addOnGlobalLayoutListener {
        val imageView = findViewById<ImageView>(R.id.image_view)
        val width = imageView.width
        val height = imageView.height
        // do initialization
    }
© www.soinside.com 2019 - 2024. All rights reserved.