Hatena::ブログ(Diary)

Kazzzの日記 このページをアンテナに追加 RSSフィード

2010-11-27

[][][]画面にフィットしないアプリケーション

既にSIMフリー版を購入している人からは報告が上がっていたのだが、GALAXY Tabにおいては一部のアプリケーションにおいて画面の縦横がフィットせずに表示されてしまう現象が発生している。

かくいう拙作のカレンダービューを配置したテストアプリケーションも、Nexus one上ではエミュレータ同様に表示されていたのがGALAXY Tabでは以下のように真ん中にぽつんと表示されてしまう。(機能自体は問題は無い)
f:id:Kazzz:20101127150354p:image:w220

有名所ではSpeedTestなどもこのように表示されてしまう。
f:id:Kazzz:20101127155841p:image:w220


この現象既にid:hyoromoさんが解析済みであり、結論から言うとandroid menifestのuses-sdk要素のminsdk属性を明示的に4に設定することで回避することができる。
GalaxyTab固有の問題と解決方法 - hyoromoの日記

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
     <activity android:name=".CalendarTest" android:label="@string/app_name">
     :
    </application>
    <uses-sdk android:minSdkVersion="4"></uses-sdk>
</manifest> 

  • 実行結果

f:id:Kazzz:20101127150355p:image:w220

  • なぜこうなるか?

Androidは複数の解像度ピクセル密度のサポートをAndroid 1.6(API Level4)の時点より開始しているが、以降、アプリケーションがサポートする解像度と密度調整について、マニフェストのsupports-screens要素における属性で記述することができる。

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 <supports-screens
          android:largeScreens="true"   ラージスクリーン(対角4.8吋以上)をサポート
          android:normalScreens="true"  ノーマルスクリーン(対角4.0吋まで)をサポート※
          android:smallScreens="true"   スモールスクリーン(対角2.6〜3.0吋まで)をサポート
          android:anyDensity="true"     密度を調整可能
  />
  </manifest>

※ Android1.5以前はこの解像度のみサポート

以上のようにアプリケーションがAndroidでサポート可能な画面の大きさを明示的に指定できる。ところがこれらの属性は明示的に記述しない場合、その規定値は上述したuses-sdk要素のandroid:minSdkVersionの値によって変わるのである

    • android:minSdkVersion <= 3又は明示的に記述無し (今回の問題はこれに該当)

全ての属性は"false"がセットされたと見なされる

    • android:minSdkVersion >= 4

全ての属性は"true"がセットされたと見なされる

Manifest attributes for screens support - Default values for attributes より

つまりandroid:minSdkVersionを記述しない場合、複数解像度サポート無し、密度調整サポート無し、というアプリケーションと見なされるためAndroid1.5以前の標準デバイス(android:normalScreens)以外は正しく描画されないということになる訳だ。
また、Android 1.6以降であっても特定の解像度をサポートしない場合は前述した属性を明示的に記述する必要があるだろう。

なお、上記の属性でGALAXY Tabで必要な属性は

<supports-screens 
  android:largeScreens="true"
  android:anyDensity="true" />

ということになる。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証