2012-10-08 7 views
40

私は小さな問題を抱えています。私はサーバーに画面の幅を送る必要がある関数を書いています。私はすべてそれを働かせて、私は使用する:表示に.getWidthを使用することは安全ですか?

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 

の幅を取得する。しかし.getWidht()関数は廃止され、それはuが使用する必要が言う:

Point size = new Point(); 
display.getSize(size); 

をしかし、その機能はAPIレベル13以上のための唯一のavaibleである、と私の最小SDKは、私が何を行うことができますので、8のですか? getWidthにとどまると安全ですか?なぜ新機能を追加し、後ろに互換性を持たせないのですか?

答えて

90

は、このアプローチかもしれませ参考になるでしょう:

DisplayMetrics displaymetrics = new DisplayMetrics(); 
mContext.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
int screenWidth = displaymetrics.widthPixels; 
int screenHeight = displaymetrics.heightPixels; 
10

あなたは、実行時にAPIレベルをチェックし、例えば、使用するかを選択することができます:あなたが正しいことをしたい場合は

final int version = android.os.Build.VERSION.SDK_INT; 
final int width; 
if (version >= 13) 
{ 
    Point size = new Point(); 
    display.getSize(size); 
    width = size.x; 
} 
else 
{ 
    Display display = getWindowManager().getDefaultDisplay(); 
    width = display.getWidth(); 
} 
+0

私はgetwidthだけを使用すると大丈夫ですか? – gabrjan

+0

はい、古いバージョンでは利用できない場合は、オプションはありません。 – nmw

+1

ほとんどの場合、getWidth()で十分に細かく処理できます。 – slezadav

4

は、このアプローチを使用する>

  int sdk = android.os.Build.VERSION.SDK_INT; 
      if (sdk < android.os.Build.VERSION.RELEASE) { 
       Display display = getWindowManager().getDefaultDisplay(); 
       int width = display.getWidth(); 

      } else { 
       Point size = new Point(); 
       display.getSize(size); 

      } 
+2

intとString(VERSION.RELEASE)を比較しています。 – nmw

+3

正しいものにしたいのであれば、intをStringと比較しないで、最終的なローカル変数にintを格納しないでください。その変数は必要ありません。理由は何ですか? ;)あなたはおそらく 'if(Build.VERSION.SDK_INT> = Build.VERSION_CODES.HONEYCOMB_MR2){' –

関連する問題