Я уже отвечал на этот вопрос раньше, но мой предыдущий ответ только позволил мне заполнить экран (раньше он занимал только верхнюю треть), но я никогда не мог использовать альтернативный макет.Я использую HTC Rezound с дисплеем 1280 на 720.Мне нужно было выяснить, что за дисплей Android считает, что это.Я добавил следующий код в мой обработчик onCreate:
// Figure out what kind of display we have
int screenLayout = getResources().getConfiguration().screenLayout;
if ((screenLayout & Configuration.SCREENLAYOUT_SIZE_SMALL) == Configuration.SCREENLAYOUT_SIZE_SMALL)
LogMessage("Main onCreate", "Info", "Screen size is Small");
else if ((screenLayout & Configuration.SCREENLAYOUT_SIZE_NORMAL) == Configuration.SCREENLAYOUT_SIZE_NORMAL)
LogMessage("Main onCreate", "Info", "Screen size is Normal");
else if ((screenLayout & Configuration.SCREENLAYOUT_SIZE_LARGE) == Configuration.SCREENLAYOUT_SIZE_LARGE)
LogMessage("Main onCreate", "Info", "Screen size is Large");
if ((screenLayout & Configuration.SCREENLAYOUT_LONG_YES) == Configuration.SCREENLAYOUT_LONG_YES)
LogMessage("Main onCreate", "Info", "Screen size is Long");
// Get the metrics
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int heightPixels = metrics.heightPixels;
int widthPixels = metrics.widthPixels;
int densityDpi = metrics.densityDpi;
float density = metrics.density;
float scaledDensity = metrics.scaledDensity;
float xdpi = metrics.xdpi;
float ydpi = metrics.ydpi;
LogMessage("Main onCreate", "Info", "Screen W x H pixels: " + widthPixels + " x " + heightPixels);
LogMessage("Main onCreate", "Info", "Screen X x Y dpi: " + xdpi + " x " + ydpi);
LogMessage("Main onCreate", "Info", "density = " + density + " scaledDensity = " + scaledDensity +
" densityDpi = " + densityDpi);
И результаты в журналах были такими:
Info, Main onCreate, Screen size is Normal
Info, Main onCreate, Screen size is Long
Info, Main onCreate, Screen W x H pixels: 720 x 1280
Info, Main onCreate, Screen X x Y dpi: 345.0566 x 342.23157
Info, Main onCreate, density = 2.0 scaledDensity = 2.0 densityDpi = 320
После этого я понял, что Android называет это обычным дисплеемсоздал каталог res / layout-normal-1280x720 с моими альтернативными файлами макетов.
Мой манифест содержал:
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"
/>
<uses-sdk android:targetSdkVersion="9" android:minSdkVersion="8" />
С этими изменениями я наконец смог получить альтернативную раскладку для использования с этим телефоном.