9

次のようなアクティビティ サブクラスから始まるビュー サブクラスがあります。

this.setContentView(instanceOfMyView);

そのビューのサブクラスで、画面サイズを操作したいのですが、ここにいるすべての人は、次のように開始する必要があると言っています。

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

しかしgetWindowManager()、アクティビティのサブクラスからしか呼び出せないメソッドですか(そうですか?)

それで、それは悪い考えですか?アクティビティで画面サイズを取得し、それをビューコンストラクターでパラメーターとして使用するか、ビューサブクラスで画面サイズを取得する方法がありますか? たぶん、ビュークラスのアクティビティのインスタンスへのリンクをどうにかして取得する必要がありますか?

前もって感謝します。

4

5 に答える 5

33

はい、方法があります。コンテキスト オブジェクトを非アクティビティ クラスに渡すことができれば、

   int width= context.getResources().getDisplayMetrics().widthPixels;
   int height= context.getResources().getDisplayMetrics().heightPixels;

Activity オブジェクト自体は必要ありません。

于 2012-07-26T12:52:20.317 に答える
4
DisplayMetrics metrics = getBaseContext().getResources().getDisplayMetrics();         
    final int w = metrics.widthPixels;
    final int h = metrics.heightPixels;
于 2012-07-26T12:56:14.057 に答える
0

受け入れられた答えよりもさらに簡単です。コンテキストは必要ありません。

object ScreenUtils {

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

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

}
于 2020-02-27T11:47:53.300 に答える