【Android】getter for defaultdisplay display is deprecated ← この警告の修正方法

AndroidStudioにて、こんな警告に遭遇

▼ こういう警告が出ていた

「'getter for defaultDisplay: Display!' is deprecated」

画面の幅と高さを取得するコードで発生しました。

別にエラーじゃなくて警告だから無視してもOKなんですが…API的に非推奨なのを使うのは気持ち悪いので、修正を試すことにしました。

その忘備録として残しておきます。

キッカケはSurfaceViewについてググってた時

SurfaceViewで次のことを実現したかったです。

  • 動画をSurfaceViewに直接描画する
  • その幅・高さを画面に合わせたい

そしてググってると良さげな記事を見つけました。

▼ StackOverflowのこの回答

Hello try with below code:

引用元 : https://stackoverflow.com/questions/20491499/resizing-surface-view-for-aspect-ratio-change-in-video-display-in-android

なるほど。動画アスペクトと画面アスペクトを求めておき、その比率が 動画アスペ > 画面アスペ だったら画面幅いっぱいに表示というコードです。

回答を見つけたので早速試してみました。

冒頭のdefaultDisplay is deprecatedの警告に遭遇

実際にコードを書いてみます。

▼ こんなコード(kotlin)

▼ あれ?打消し線が表示されてる……

Android Studio : この画像のようにwindowManager.defaultDisplay.width / height に警告の打消し線が表示されていた…

▼ 警告出力を見みると次のwarningが出てた

こういう経緯で冒頭の警告に出会ったわけです。

警告だから無視してもよかったけど…

解決策はResourcesから画面幅・高さを取得すること

このワーニングは次の方法で解消できます。

  • まずデフォルトのDisplayManagerを取得する
  • そこからDisplayContextを生成する
  • 幅・高さをそのResourcesから取得可能

文字で書くと分かりにくいのでコードで示します。

▼ このようなコードで画面幅・高さを取得

これで無警告で画面幅・高さが取得できました。

単純に this.resources.displayMetrics.widthPixels  からでも取得できるけど、それだと不都合もありえるので回りくどいコードです(間違いがあれば指摘ください)

Androidの警告・非推奨APIの関連記事

最後に関連記事をついでに紹介します。

Android Studioの警告・Androidの非推奨APIの関連…

以上、defaultdisplay display is deprecated の対処法でした。

エラーではないけど修正するのがベターです。