4

アクティビティを開始する前にデバイスのアスペクト比を取得することはできますか?

デバイスが「long」または「not_long」として識別されるかどうかに基づいて幅を設定しようとしています。これは、アクティビティが開始されるずっと前に利用できるはずですが、この変数をどこで取得できるかわかりません。このメソッドが実行される時点では、アクティビティは使用できません。また、メモリ リークを回避するために、次のメソッドを含むクラスにアクティビティを渡したくありません。

失敗した呼び出しメソッドは次のとおりです。

public int getDefaultWidth() { 
        Configuration myConfig = new Configuration();
        myConfig.setToDefaults();
        myConfig = getResources().getConfiguration();

        switch (myConfig.screenLayout & Configuration.SCREENLAYOUT_LONG_MASK) {

            case Configuration.SCREENLAYOUT_LONG_NO: {
                return this._defaultWidth;
            }
            case Configuration.SCREENLAYOUT_LONG_YES: {
                return this._defaultWidthLong;
            }
            case Configuration.SCREENLAYOUT_LONG_UNDEFINED: {
                return this._defaultWidth;
            }
        }
        return this._defaultWidth;
    }
4

3 に答える 3

0

これはどこで実行されていますか?コードを実行する方法がわかりません。また、Contextから継承するインスタンス化されたものがありません。サービスはコンテキストから継承し、BroadcastReceiverのonReceiveにはコンテキストが与えられます。

また、Contextを渡す代わりに、このメソッドが呼び出されている場所からConfigurationオブジェクトを渡すことができます。

于 2011-06-21T20:47:03.623 に答える
0

アクティビティからこのメソッドを呼び出す場合。getDefaultWidth()メソッドのパラメーターとして「this」を渡すことができます。次に、それをコンテキストとして使用できます。

public int getDefaultWidth(Context context) { ... }

そして、activitymでそれを次のように呼びます

int width = getDefaultWidth(this)
于 2011-06-21T20:57:08.703 に答える
0

アプリの Application コンテキストは、アクティビティの前に作成されます。アプリケーションには有効なコンテキストがあるため、それを使用して必要なものを取得し、静的変数またはメンバー変数を設定してから、最初のアクティビティでそれを参照できます。

Application コンテキストは、Application を拡張する新しいクラスを追加し、AndroidManifest.xml を少し変更することで処理できます。

マニフェスト:

<application android:enabled="true"...
   android:name=".Foo">
...
</application>

アプリケーションを拡張する新しいクラスをプロジェクトに追加します。

public class Foo extends Application {

private int mWidth;

@Override
public void onCreate() {
    super.onCreate();
    // do stuff to set mWidth using the Application context like:
    // mWidth = getResources().getConfiguration().blahblahblah
}   

public int getWidth() {
    return mWidth;
}

アクティビティから、これを実行して幅を取得します。

int width = ((Foo)getApplication()).getWidth();
于 2011-06-21T21:09:41.627 に答える