2012-12-18 98 views
0

对于这个问题的答案可能对我来说太高级了,但我仍然想试一试。我能够确定和设置方法中的屏幕尺寸值,但它没有超出该方法的范围。我的问题是,我如何在整个班级中把它放在范围内?还在整个项目中?谢谢。这里是我用什么来确定屏幕尺寸,但它只能在单个方法中:确定屏幕尺寸 - Android Eclipse

DisplayMetrics metrics = this.getResources().getDisplayMetrics(); 
    int width = metrics.widthPixels; 
    int height = metrics.heightPixels; 

谢谢!

+1

难道你不能只是在你的方法外声明'int width'和'int height',然后在你的方法内赋值它们的值吗? – jcw

+0

我的目标只是申报变数一次,那么再也不用担心 – Evorlor

+0

哦,我明白你的意思了。我想这应该工作。我应该自己想到这一点。谢谢!做出答案,以便我可以选中你 – Evorlor

回答

1

我的问题是,我如何在整个班级内给它范围?还在整个项目中?

如果您只想设置这些值一次,扩展Application类可能是一个好的开始。

public class MyApplication extends Application { 
    private Point mDimensions; 

    @Override public void onCreate() { 
     // this will only get run on app startup 
     DisplayMetrics metrics = this.getResources().getDisplayMetrics(); 
     int width = metrics.widthPixels; 
     int height = metrics.heightPixels; 
     mDimensions = new Point(width, height); 
    } 

    public int getWidth() { 
     return mDimensions.x; 
    } 

    public int getHeight() { 
     return mDimensions.y; 
    } 
} 

要访问的getter方法,设置应用标签android:name属性在项目的清单:

<application android:name="com.myname.MyApplication" ... ></application> 

然后,您可以施放任何getApplication()getApplicationContext()调用的结果MyApplication并调用方法;例如

int width = ((MyApplication) getApplication()).getWidth(); 

请注意,由于宽度和高度值只初始化一次,他们将变化屏幕方向的变化。如果您也想考虑这一点,则接受上下文实例的简单实用方法(可以是例如ActivityService)可能是更直接的解决方案。

public static Point getDimensions(Context context) { 
    DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
    int width = metrics.widthPixels; 
    int height = metrics.heightPixels; 
    return new Point(width, height); 
} 
0

然后用方法返回结果,可以使该方法公开,或使用任何getter方法。

0

在方法声明int widthint height,然后更改它们作为nessecary。要使用不同的方法访问它们,只需将它们声明为公共,如public int width

或者,如果您将其设置为私有,那么您可以使用getter和setter方法。