Папка разных значений Android для разных размеров экрана

У меня есть проблема для моего заявления. Я хочу определить разные размеры по ширине и высоте вида или разные размеры текста для разных размеров экрана. Я определил разные папки значений для разрешения экрана, как сказано в другом вопросе и документации Android.

Но у меня есть проблема для этого пути. Например, Samsung Galaxy S5 использует папку "values-sw320dp-xxhdpi", а Samsung Galaxy S3 Mini использует папку "values-sw320dp-hdpi" в соответствии с моими тестами. Если у меня нет папки sw-320dp-xxhdpi, я ожидал, что приложение должно использовать размеры папки значений по умолчанию, но оно использует размеры другого 320dp. Итак, S3 Mini и S5 используют одинаковые значения, если я не использую папку значений для S5

После этого я попытался использовать другой способ. Я исследовал, чтобы установить экземпляр DisplayMetrics с моими значениями;

Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics outMetrics = new DisplayMetrics();
    display.getMetrics(outMetrics);
    tv2.setText(outMetrics.toString());

    if (outMetrics.widthPixels < 380 && outMetrics.heightPixels < 480) {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 304.0f, 306.0f));
        tv1.setText("1");
    } else if (outMetrics.widthPixels >= 380
            && outMetrics.widthPixels < 480
            && outMetrics.heightPixels >= 480
            && outMetrics.heightPixels < 800) {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 306.0f, 306.0f));
        tv1.setText("2");
    } else if (outMetrics.widthPixels >= 480
            && outMetrics.widthPixels < 720
            && outMetrics.heightPixels >= 800
            && outMetrics.heightPixels < 1080) {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 308.0f, 308.0f));
        tv1.setText("3");
    } else if (outMetrics.widthPixels >= 720
            && outMetrics.widthPixels < 1080
            && outMetrics.heightPixels >= 1080
            && outMetrics.heightPixels < 1920) {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 307.0f, 307.0f));
        tv1.setText("4");
    } else if (outMetrics.widthPixels == 1080
            && outMetrics.heightPixels == 1920) {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 370.0f, 370.0f));
        tv1.setText("5");
    } else {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 305.0f, 305.0f));
        tv1.setText("6");
    }

Но здесь есть логическая ошибка! Я определил строку в strings.xml с тем же именем и разными значениями. Я ожидаю, что если значения ширины и высоты экрана в моих значениях, моя предопределенная строка будет видна на экране. Некоторые устройства показывают правильное значение, некоторые устройства показывают неправильное значение. Например, HTC One E6 использует последние значения (305x305) в соответствии со своими размерами, поэтому на экране должно быть написано "Значение по умолчанию", а в "Между w480 и w720 дело!". Эта строка должна быть видна, когда устройство использует случай 308x308.

Что я должен решить эту проблему? Есть хитрый или простой способ?

0 ответов

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