0

アプリケーションを機能させるには、画面の寸法を取得する必要があります。そのために、メイン アクティビティに 2 つの関数を作成し、Activity 以外のクラスのオブジェクトを介してそれらを呼び出しています。

なぜかクラッシュし続けます。これらの関数を呼び出せないのはなぜですか? どうすれば修正できますか?

主な活動のコード:

    public int getWidth(){
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int width = display.getWidth(); 
    return width;
}

public int getHeight(){
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int height = display.getHeight(); 
    return height;
} 

非アクティビティのコード (呼び出し部分):

    main Main = new main();
private int height = Main.getHeight();
private int width = Main.getWidth();

これらのメソッドが非推奨であることは承知していますが、getSize(point); は使用できません。メソッドは、最小 API レベル 7 向けに開発しているためです。

4

2 に答える 2

3

likeで初期化するConstantsstatics フィールドを含むクラスを作成できます。onCreateActivity

public class Constants
{
    public static int DEVICE_WIDTH;
    public static int DEVICE_HEIGHT;
}

アクティビティ

onCreate(...)
{
    ...
    Constants.DEVICE_WIDTH  = this.getWidth();
    Constants.DEVICE_HEIGHT = this.getHeight();
}

これらの値が必要な場合は、次のように呼び出します。

int deviceWidth = Constants.DEVICE_WIDTH;
于 2012-05-11T23:35:06.100 に答える
1

Activityコンストラクターを使用して を作成し、適切に初期化されることを期待することはできません。それはそれがどのように機能するかではありません。コンストラクターで呼び出すだけでは、システム サービスを取得するために必要なコンテキストがありません。アクティビティの実際のインスタンスからこの情報を取得し、このデータを必要とするオブジェクトに渡す必要があります。より多くの情報/コードがなければ、それ以上の詳細を提供することは実際には実用的ではありません.

于 2012-05-11T19:53:31.047 に答える