Эмулятор Android сообщает о 600x1024 MDPI как XLarge? - PullRequest
8 голосов
/ 26 октября 2011

В настоящее время я пытаюсь протестировать существующее приложение на совместимость с готовящимся к выпуску планшетом Amazon Kindle Fire.Они говорят, чтобы установить эмулятор на 600x1024 и плотность ЖК-дисплея на 169 (https://developer.amazon.com/help/faq.html?ref_=pe_132830_21362890#KindleFire, хотя в электронном письме они сказали 160 вместо 169), и что он должен сообщать как «большой», а не «xlarge» (это у меня естьот обратной переписки по электронной почте с их службой поддержки, где я жалуюсь, что это не работает).

Кажется, что Google поддерживает это как правду в своем разделе о тестировании для нескольких размеров экрана, когда они перечисляют это разрешениеи MDPI как «большой» (http://developer.android.com/guide/practices/screens_support.html#testing). Однако каждый раз, когда я включаю папку «layout-xlarge» вместе с «layout-large», эмулятор всегда загружает «xlarge». Если я изменяю ЖК-дисплей)Плотность примерно до 240, он загружает «большой» вместо «xlarge», но это не должно быть правильным, и я волнуюсь, это означает, что это не будет работать на конечном устройстве. Чтобы проверить это, я взял API-10 образца «Multi-Res» и создал серию папок макета, описанных выше, и каждый раз он загружал «xlarge», если он был там, и загружал «большой», если не было«xlarge».

Итак, мой вопрос: правильно ли я читаю документацию или мой эмулятор каким-то образом испорчен, так как люди в Amazon настаивают на том, что он должен сообщать о «большом», чтоесли бы это было правдой, то никогда бы не загрузилось xlarge, верно?

Вот что я имею в манифесте в примере Multi-Res, который я модифицировал для проверки этого:

<?xml version="1.0" encoding="utf-8"?>
<manifest
  xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.android.multires"
  android:versionCode="1"
  android:versionName="1.0">

  <uses-permission
    android:name="android.permission.INTERNET"/>

  <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">

    <activity
      android:name=".MultiRes"
      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" />

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

</manifest>

1 Ответ

6 голосов
/ 15 ноября 2011

Это похоже на ошибку в документации. Если мы посмотрим на фактический код, который используется для расчета размера экрана, мы увидим, что экран 600x1024 с разрешением 160 т / д действительно будет рассматриваться как xlarge.

Не верь мне на слово. Реализация в WindowManagerService.computeNewConfigurationLocked () (предупреждение для медленного JavaScript). Интересные моменты заключаются в следующем. Размер экрана в пикселях масштабируется в зависимости от плотности:

    longSize = (int)(longSize/dm.density);
    shortSize = (int)(shortSize/dm.density);

Для экрана с разрешением mdpi (160 точек на дюйм) плотность dm.density будет 1,0. Для HDDP (240 точек на дюйм) это будет 1,5. В нашем случае у нас есть экран MDP. Таким образом, после выполнения этого кода longSize == 1024 и shortSize == 600. Вскоре мы достигаем этого кода:

    // What size is this screen screen?
    if (longSize >= 800 && shortSize >= 600) {
        // SVGA or larger screens at medium density are the point
        // at which we consider it to be an extra large screen.
        mScreenLayout = Configuration.SCREENLAYOUT_SIZE_XLARGE;
    } else if ( // ...

, что с нашими значениями longSize и shortSize означает, что mScreenLayout будет назначено Configuration.SCREENLAYOUT_SIZE_XLARGE, другими словами, что экран будет считаться «большим». Интересно отметить, что если бы экран был на один пиксель меньше на короткой стороне, он считался бы «большим».

Итак, вы правильно читаете документацию, но, насколько я вижу, документация неверна, и ваш эмулятор в порядке.

...