Папка разных значений 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.
Что я должен решить эту проблему? Есть хитрый или простой способ?