Get the size of my homescreen widget

前端 未结 6 2095
没有蜡笔的小新
没有蜡笔的小新 2021-02-02 15:46

I just want to know how big my current widget is. I found tons of questions to set the minimum size, but I don\'t want to set it. Instead I want to show that informations which

6条回答
  •  萌比男神i
    2021-02-02 16:00

    We can't get widget size from OPTION_APPWIDGET_MAX_WIDTH and OPTION_APPWIDGET_MAX_HEIGHT it will return wrong values.

    This solution based on @Zanael answer. And I add delta value because on some device cellSize can be not in minSize and maxSize range.

    private fun getWidgetSize(minSize: Int, maxSize: Int, context: Context): Int {
        var delta = Int.MAX_VALUE
        var lastDeltaRecord = -1
        for (i in 1..30) {
            val cellSize = convertDpToPx(40f * i, context).toInt() - (30 * i)
            if (cellSize in minSize..maxSize) {
                return i
            }
            val deltaMin = abs(minSize - cellSize)
            val deltaMax = abs(cellSize - maxSize)
            if (delta > deltaMin) {
                delta = deltaMin
                lastDeltaRecord = i
            }
            if (delta > deltaMax) {
                delta = deltaMax
                lastDeltaRecord = i
            }
        }
        return lastDeltaRecord
    }
    
    private fun convertDpToPx(sp: Float, context: Context): Float {
        return TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            sp,
            context.resources.displayMetrics
        )
    }
    

提交回复
热议问题