2013-12-07 3 views
0

Я работаю над приложением, которое должно выглядеть одинаково на всех устройствах. Проблема в том, что если устройство имеет экран с большим разрешением (например, 1920x1080 и плотность разрешений 320), то все элементы начинают выглядеть маленькими.Изменение DisplayMetrics для приложения на Android (уровень API ниже 17)

На уровне 17 API и выше я могу использовать этот код, чтобы исправить эту проблему:

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); 

    android.content.res.Configuration config = context.getResources().getConfiguration(); 
    config.densityDpi = <desired dpi goes here>; 
    context.getResources().updateConfiguration(config, displayMetrics); 

Но он бросает исключение java.lang.NoSuchFieldError: android.content.res.Configuration.densityDpi если уровень API ниже.

Таким образом, вместо изменения densityDpi в конфигурации, я попытался это:

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); 

    android.content.res.Configuration config = context.getResources().getConfiguration(); 
    displayMetrics.densityDpi = <desired dpi goes here>; 
    context.getResources().updateConfiguration(config, displayMetrics); 

Но этот код не имеет никакого эффекта :(Может быть, я использую это неправильно Может кто-то ясно, что для меня.? пожалуйста

UPDATE:. Так что, никто ничего не знает об этом:/

ответ

1

Вы должны смотреть на пакеты/приложений/настроек/отображение settings.Java fONT_SIZE часть, она использует метрики отображения для масштабируемого шрифта собственности, но я думаю, что вам нужно использовать свойство плотности вместо плотностиDPI

3

Вам просто нужно обновить как вашу конфигурацию, так и displayMetrics следующим образом.

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); 

Configuration config = context.getResources().getConfiguration(); 
displayMetrics.densityDpi = DisplayMetrics.DENSITY_LOW; 
config.densityDpi = DisplayMetrics.DENSITY_LOW; 

context.getResources().updateConfiguration(config, displayMetrics); 
0

Не уверен, что вы все еще ищете ответ. Но попробуйте следующее:

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); 
Configuration config = context.getResources().getConfiguration(); 
displayMetrics.densityDpi = DisplayMetrics.DENSITY_LOW; 
config.densityDpi = DisplayMetrics.DENSITY_LOW; 
displayMetrics.setTo(displayMetrics); 
config.setTo(config); 
context().getResources().updateConfiguration(config, displayMetrics); 
Смежные вопросы