2013-08-22 3 views
2

Автоматический коммутатор макета прекрасно подходит для 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.

Что происходит?

+1

Можете ли вы проверить множитель dp для xperia Z? Http: // StackOverflow.com/questions/3166501/get-the-screen-density-programatically-in-android –

+0

Спасибо @Pork, я проверил размер экрана своих телефонов и обновил свой вопрос. Вы знаете, как я могу это решить? – ericn

ответ

1

Я использовал w500dp-land как определитель размера экрана для ландшафта Xperia Z. Это, по крайней мере, работает, тогда как w600dp-land игнорируется. После проверки устройства, которое имеет смысл: Размеры Xperia Z dp равны 360 * 592 согласно https://play.google.com/store/apps/details?id=com.sturnus.screeninfo