Android SDKで画面が533x320ドットになる問題の解決策

test126_01.png
Androidで画像表示をしているうちに、画面サイズが533×320ドットとして認識される問題にぶつかりました。

以下のようなソースコードで画面のサイズや解像度などの情報を取得する。実行にはHTC Desireを利用した。
package com.Test126;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;

public class Test126Act extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);


		WindowManager	wmWindowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
		Display			display = wmWindowManager.getDefaultDisplay();

		Log.d("Test126","Display.getWidth() " + display.getWidth());
		Log.d("Test126","Display.getWidth() " + display.getHeight());
		
		DisplayMetrics	displayMetrics = new DisplayMetrics();
		display.getMetrics(displayMetrics);
		Log.d("Test126","DisplayMetrics.widthPixels   " + displayMetrics.widthPixels);
		Log.d("Test126","DisplayMetrics.heightPixels  " + displayMetrics.heightPixels);
		Log.d("Test126","DisplayMetrics.density       " + displayMetrics.density);
		Log.d("Test126","DisplayMetrics.densityDpi    " + displayMetrics.densityDpi);
		Log.d("Test126","DisplayMetrics.scaledDensity " + displayMetrics.scaledDensity);
		Log.d("Test126","DisplayMetrics.xdpi          " + displayMetrics.xdpi);
		Log.d("Test126","DisplayMetrics.ydpi          " + displayMetrics.ydpi);
	}
}

test126_02.png
するとこのような結果になった。HTC Desireの物理的な画面サイズは800×480ドットだが、取得できたサイズは533×320ドット。

マニフェスト設定によってはこのような結果になるらしい。もちろんこの状態だと、アプリ内での描画サイズも533×320ドットになり、800×480ドットの画面サイズを活かした緻密な描画ができない。
01-21 00:22:41.873: DEBUG/Test126(8149): Display.getWidth() 533
01-21 00:22:41.873: DEBUG/Test126(8149): Display.getWidth() 320
01-21 00:22:41.873: DEBUG/Test126(8149): DisplayMetrics.widthPixels   533
01-21 00:22:41.873: DEBUG/Test126(8149): DisplayMetrics.heightPixels  320
01-21 00:22:41.873: DEBUG/Test126(8149): DisplayMetrics.density       1.5
01-21 00:22:41.873: DEBUG/Test126(8149): DisplayMetrics.densityDpi    240
01-21 00:22:41.873: DEBUG/Test126(8149): DisplayMetrics.scaledDensity 1.5
01-21 00:22:41.873: DEBUG/Test126(8149): DisplayMetrics.xdpi          254.0
01-21 00:22:41.873: DEBUG/Test126(8149): DisplayMetrics.ydpi          254.0

test126_03.png 533×320ドットになる問題の解決策のひとつはAndroidManifest.xmlの中でuses-sdk android:minSdkVersionを指定する方法。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.Test126"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Test126Act"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

<uses-sdk android:minSdkVersion="4"/>

</manifest>

test126_04.png これできちんと800×480ドットと認識できた。
01-21 00:23:46.933: DEBUG/Test126(8221): Display.getWidth() 800
01-21 00:23:46.933: DEBUG/Test126(8221): Display.getWidth() 480
01-21 00:23:46.933: DEBUG/Test126(8221): DisplayMetrics.widthPixels   800
01-21 00:23:46.933: DEBUG/Test126(8221): DisplayMetrics.heightPixels  480
01-21 00:23:46.933: DEBUG/Test126(8221): DisplayMetrics.density       1.5
01-21 00:23:46.933: DEBUG/Test126(8221): DisplayMetrics.densityDpi    240
01-21 00:23:46.933: DEBUG/Test126(8221): DisplayMetrics.scaledDensity 1.5
01-21 00:23:46.933: DEBUG/Test126(8221): DisplayMetrics.xdpi          254.0
01-21 00:23:46.933: DEBUG/Test126(8221): DisplayMetrics.ydpi          254.0

test126_05.png もう一つの解決策はsupports-screensでandroid:largeScreensなどを有効にする方法。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.Test126"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Test126Act"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>


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

test126_06.png こちらでも800×480ドットと認識された。
01-21 00:24:52.513: DEBUG/Test126(8294): Display.getWidth() 800
01-21 00:24:52.513: DEBUG/Test126(8294): Display.getWidth() 480
01-21 00:24:52.513: DEBUG/Test126(8294): DisplayMetrics.widthPixels   800
01-21 00:24:52.513: DEBUG/Test126(8294): DisplayMetrics.heightPixels  480
01-21 00:24:52.513: DEBUG/Test126(8294): DisplayMetrics.density       1.5
01-21 00:24:52.513: DEBUG/Test126(8294): DisplayMetrics.densityDpi    240
01-21 00:24:52.513: DEBUG/Test126(8294): DisplayMetrics.scaledDensity 1.5
01-21 00:24:52.513: DEBUG/Test126(8294): DisplayMetrics.xdpi          254.0
01-21 00:24:52.513: DEBUG/Test126(8294): DisplayMetrics.ydpi          254.0

プロジェクトファイルをダウンロード

カテゴリー「android」 のエントリー