2011年1月17日月曜日

Service にて画面解像度を取得

とりあえず Activity を使った普通のアプリ(WzEditor 形式のメモ帳編集アプリ)はなんとか出来上がりました。

そこで、今度は簡単な Widget に挑戦してみることにしました。
通常アプリとはだいぶ作りが違い制約も多い><;

まぁ、なんとかカレンダーを表示するところまではできたのですが、当月以外の日付のフォントを小さくしたくなりました。
で、フォントサイズを変えようとしたのですが RemoteViews で引き数が2つあるメソッドの呼び出し方がわからない><;

↓これを呼びたい
textView.setTextSize( TypedValue.COMPLEX_UNIT_DIP, textSize ); 

んじゃ、dp値から ピクセル数を計算するかと思ったのですが、サービスからでは context.getWindowManager()がエラーになる><;

ん~、しばらく悩んだのですが、 Android API 2.2 のドキュメントを見ていて見つけました。この方法だとどこからでも呼べそうです。

// Context の取得
Context context = this.getBaseContext( );
CamLog.Debug( "context = " + context.toString( ) );

// WindowManager の取得
WindowManager wm = (WindowManager)context.getSystemService( Context.WINDOW_SERVICE );
CamLog.Debug( "wm = " + wm.toString( ) );

// DisplayMetrics の取得
DisplayMetrics objMetrics = new DisplayMetrics( );
wm.getDefaultDisplay( ).getMetrics( objMetrics );
CamLog.Debug( "metrics = " + objMetrics.toString( ) );

CamLog.Debug( "scaledDensity = " + objMetrics.scaledDensity );

// 通常フォントサイズの取得
// fPixel * Metrics#scaledDensity = fDip
// fPixel = fDip / Metrics#scaledDensity
m_fFontSizeThis = FONT_SIZE_THIS / objMetrics.scaledDensity;
m_fFontSizeOther = FONT_SIZE_OTHER / objMetrics.scaledDensity;