获取屏幕大小不是来自Activity子类

时间:2012-07-26 12:47:57

标签: android android-activity android-view screen-size

我有一个从活动子类开始的视图子类:

this.setContentView(instanceOfMyView);

在我的视图子类中,我希望对屏幕大小做一些工作,但是这里的所有人都说它应该像:

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm); 
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels; 

但是getWindowManager()是可以仅从活动子类调用的方法(我是对的吗?)

那么,这是不是坏主意我需要在活动中获取屏幕大小并将其用作视图构造函数中的参数,或者有一种方法可以在视图子类中获取屏幕大小?也许,只需要以某种方式获取视图类中活动实例的链接?

提前致谢。

5 个答案:

答案 0 :(得分:27)

是的,如果您可以将Context对象传递给非活动类

,则有一种方法
   int width= context.getResources().getDisplayMetrics().widthPixels;
   int height= context.getResources().getDisplayMetrics().heightPixels;

您不需要活动对象本身。

答案 1 :(得分:4)

DisplayMetrics metrics = getBaseContext().getResources().getDisplayMetrics();         
    final int w = metrics.widthPixels;
    final int h = metrics.heightPixels;

答案 2 :(得分:1)

比接受的答案还要简单。您不需要上下文。

object ScreenUtils {

    fun getScreenWidth() = Resources.getSystem().displayMetrics.widthPixels

    fun getScreenHeight() = Resources.getSystem().displayMetrics.heightPixels

}

答案 3 :(得分:0)

这里的其他答案不会给您屏幕分辨率。

这是您应该如何做:

            val windowManager=context.getSystemService(WINDOW_SERVICE) as WindowManager
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
                windowManager.defaultDisplay.getRealSize(point)
            else windowManager.defaultDisplay.getSize(point)
            val screenWidth = point.x
            val screenHeight = point.y

文档:

https://developer.android.com/reference/android/view/Display.html#getRealSize(android.graphics.Point)

答案 4 :(得分:0)

这可以在任何课程中使用:

DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
Integer with = metrics.widthPixels;
Integer height = metrics.heightPixels;

希望获得帮助