Как управлять размерами для экранов 800*480 с пользовательскими плотностями?

Требуется поддержка нескольких дисплеев с разрешением 800*480 и несколькими настраиваемыми значениями dpi 240, 213, 210, 220.
Есть ли способ создать различные папки значений, чтобы сохранить размеры в XML? Написал код для проверки отображаемой информации и получил странные результаты журналов на устройствах с (длинной, нормальной) отображаемой информацией. Fe:

информация 213 точек на дюйм

[Приложение:onCreate:164]: SCREENLAYOUT_SIZE_NORMAL, [Приложение:onCreate:181]: SCREENLAYOUT_LONG_YES,[Приложение:onCreate:201]: dpiClassification: 213, xDpi: 213.0, yDpi: 213.0

еще один запуск

[Приложение:onCreate:164]: SCREENLAYOUT_SIZE_NORMAL, [Приложение:onCreate:178]: SCREENLAYOUT_LONG_NO, [Приложение:onCreate:201]: dpiClassification: 213, xDpi: 213.0, yDpi: 213.0

или для 240 точек на дюйм

[Приложение:onCreate:164]: SCREENLAYOUT_SIZE_NORMAL, [Приложение:onCreate:178]: SCREENLAYOUT_LONG_NO, [Приложение:onCreate:201]: dpiClassification: 240, xDpi: 240.0, yDpi: 240.0

и следующий запуск

[Приложение:onCreate:164]: SCREENLAYOUT_SIZE_NORMAL, [Приложение:onCreate:181]: SCREENLAYOUT_LONG_YES,[Приложение:onCreate:201]: dpiClassification: 240, xDpi: 240.0, yDpi: 240.0

  int screenSize = getResources().getConfiguration().screenLayout &
            Configuration.SCREENLAYOUT_SIZE_MASK;

    switch(screenSize) {
        case Configuration.SCREENLAYOUT_SIZE_LARGE:
            Logger.e("SCREENLAYOUT_SIZE_LARGE");
            break;
        case Configuration.SCREENLAYOUT_SIZE_NORMAL:
            Logger.e("SCREENLAYOUT_SIZE_NORMAL");
            break;
        case Configuration.SCREENLAYOUT_SIZE_SMALL:
            Logger.e("SCREENLAYOUT_SIZE_SMALL");
            break;
        default:
            Logger.e("default screen size+: "+screenSize);
    }

    int screenLong = getResources().getConfiguration().screenLayout &
            Configuration.SCREENLAYOUT_LONG_MASK;

    switch(screenLong) {
        case Configuration.SCREENLAYOUT_LONG_NO:
            Logger.e("SCREENLAYOUT_LONG_NO");
            break;
        case Configuration.SCREENLAYOUT_LONG_YES:
            Logger.e("SCREENLAYOUT_LONG_YES");
            break;
        case Configuration.SCREENLAYOUT_LONG_UNDEFINED:
            Logger.e("SCREENLAYOUT_LONG_UNDEFINED");
            break;
        default:
            Logger.e("screenLong : "+screenLong);
    }

    DisplayMetrics dm = new DisplayMetrics();

    ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm);

    int dpiClassification = dm.densityDpi;

    float xDpi = dm.xdpi;
    float yDpi = dm.ydpi;

    Logger.e("dpiClassification: "+dpiClassification+", xDpi: "+xDpi+", yDpi: "+yDpi);

0 ответов

Другие вопросы по тегам