私の質問は、クラス全体にスコープを与えるにはどうすればよいですか? プロジェクト全体でも?
これらの値を 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 タグに属性を設定します。
<application android:name="com.myname.MyApplication" ... ></application>
その後、any の結果をキャストして、メソッドを呼び出してgetApplication()
呼び出すgetApplicationContext()
ことができます。MyApplication
例えば
int width = ((MyApplication) getApplication()).getWidth();
幅と高さの値は一度だけ初期化されるため、画面の向きが変わっても変更されないことに注意してください。それも考慮に入れたい場合は、コンテキストインスタンス(Activity
またはなどService
)を受け入れる単純な util メソッドがおそらくより簡単な解決策です。
public static Point getDimensions(Context context) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
return new Point(width, height);
}