Автоматический коммутатор макета прекрасно подходит для 2 макетов для моих 2 устройств, но не для третьего.Поддержка 3 различных размеров экрана с использованием доступного экрана ширины квалификатора w <N> dp
У меня 2 Android телефоны (мое предположение, что PPI такая же, как на дюйм здесь)
- HTC Desire - (480x800, 252 точек на дюйм, Android 2.2)
- HTC Sensation - более длинная сторона является > 600dp (540x960 пикселей; 256 точек на дюйм; Android 4.0.4)
- Sony Xperia Z - более длинная сторона является> 690dp (1080x1920 пикселей; 443 точек на дюйм; Android 4.2.2)
Таким образом, я создал следующие макеты, чтобы позаботиться о 3 ph (я не использую самую маленькую доступную ширину sw<N>dp
, так как мое приложение поддерживает только пейзаж; Таким образом, я только заботиться о более размера экрана)
/res/layout/main.xml
/res/layout-w600dp/main.xml
/res/layout-w690dp/main.xml
Схема /res/layout/main.xml
показывает правильно для HTC Desire и /res/layout-w600dp/main.xml
для HTC Sensation, но не Xperia Z (/res/layout/main.xml
показывает вверх вместо /res/layout-w690dp/main.xml
)
Я что-то пропустил?
Мое приложение ориентирована на Android 4.0 (так я смотрю только на отборочные размер экрана для Android 3.2 и выше)
Я думал о проверке размера экрана во время выполнения, а затем выбрать соответствующий макет, но затем в этом случае будут использоваться квалификаторы, не так ли?
Мой manifest.xml на данный момент:
...
<uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="14" />
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens= "true"
android:anyDensity="true" />
...
Updates
Теперь, когда я использовал DensityMetrics обнаружить плотность экрана Мои телефоны, они не являются на самом деле так же, как цифры PPI:
- HTC Sensation - 240dpi
- Xperia Z - 480dp i
Таким образом, как HTC Sensationa, так и Xperia Z имеют размер 360dp x 640dp. Я удалил 1 раскладку и держать следующее:
/res/layout/main.xml
/res/layout-w600dp/main.xml
Когда я запускаю мое приложение, то HTC Sensation все еще показывает /res/layout-w600dp/main.xml
расположение в то время как Xperia Z все еще показывает /res/layout/main.xml
.
Что происходит?
Можете ли вы проверить множитель dp для xperia Z? Http: // StackOverflow.com/questions/3166501/get-the-screen-density-programatically-in-android –
Спасибо @Pork, я проверил размер экрана своих телефонов и обновил свой вопрос. Вы знаете, как я могу это решить? – ericn