+class DisplaySizeGetter {
+ fun getSize(display: Display): Point? {
+ val sdkType = SdkType.getInstance(Build.VERSION.SDK_INT)
+ SdkType.JELLY_BEAN -> return SdkType.JELLY_BEAN.getSize(display)
+ SdkType.ICE_CREAM_SANDWITCH -> return SdkType.ICE_CREAM_SANDWITCH.getSize(display)
+ SdkType.HONEW_COMB -> return SdkType.HONEW_COMB.getSize(display)
+ else -> return SdkType.OLD_SDK.getSize(display)
+ enum class SdkType(var sdk: Int) {
+ override fun getSize(display: Display): Point? {
+ var metrics = DisplayMetrics()
+ display.getRealMetrics(metrics)
+ ICE_CREAM_SANDWITCH(14) {
+ override fun getSize(display: Display): Point? {
+ var mGetRawH: Method? = null
+ mGetRawH = Display::class.java.getMethod("getRawHeight");
+ var mGetRawW = Display::class.java.getMethod("getRawWidth");
+ outPoint.x = mGetRawW.invoke(display) as Int
+ outPoint.y = mGetRawH.invoke(display) as Int
+ } catch (e: Throwable) {
+ override fun getSize(display: Display): Point? {
+ display.getSize(outPoint)
+ override fun getSize(display: Display): Point? {
+ return Point(display.getWidth(), display.getHeight())
+ fun getInstance(sdk: Int): SdkType {
+ for (version in arrayOf(JELLY_BEAN, ICE_CREAM_SANDWITCH, HONEW_COMB, OLD_SDK)) {
+ if (sdk >= version.sdk) return version
+ abstract fun getSize(display: Display): Point?