Отключение приложения или масштабирования активности, если Настройки -> Дисплей -> Размер дисплея изменен на Большой или маленький - PullRequest
0 голосов
/ 09 мая 2018

В моем приложении я не хочу, чтобы оно изменяло размеры из-за проблем с дизайном.

Я пытался использовать android:resizeableActivity="false" в теге приложения и теге активности средства запуска, но это не помогло.

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Я нашел решение для этого.

Если системный размер текста изменился или для параметра Размер дисплея установлено значение Большой (выше Android Oreo), ваше приложение будет работать как обычно (без большого текста и увеличенных изображений) с кодом ниже:

        Configuration configuration = getResources().getConfiguration();
        configuration.fontScale = (float) 1; //0.85 small size, 1 normal size, 1,15 big etc
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        metrics.scaledDensity = configuration.fontScale * metrics.density;
        configuration.densityDpi = (int) getResources().getDisplayMetrics().xdpi;
        getBaseContext().getResources().updateConfiguration(configuration, metrics);
0 голосов
/ 09 мая 2018

Я предполагаю, что вы пытаетесь получить отображение, которое не меняется, если пользователь изменяет параметры доступа на своем телефоне в зависимости от размера пользовательского интерфейса.

Вы можете получить эту работу, используя DisplayMetrics.

DisplayMetrics metrics = getResources().getDisplayMetrics();

При «нормальных» значениях масштабного коэффициента metrics.xdpi и metrics.densityDpi имеют одинаковое значение. Если это не так, вы можете получить «реальный» масштабный коэффициент, который используется, когда пользователь использует нормальное масштабирование, используя следующее.

if(metrics.xdpi != metrics.densityDpi){
        Log.d(TAG,"Real scale " +  (metrics.xdpi / metrics.densityDpi)*metrics.density);
}

Чем вы можете использовать указанное значение для умножения ваших фиксированных значений из макета, чтобы оно могло иметь точную плотность на разных экранах. Это также будет означать, что каждое значение в макете должно использовать px вместо dp или sp.


Хотя этот подход будет работать, я настоятельно рекомендую его не использовать.

Во-первых, потому что это много работы, и будет сложно поддерживать этот код в будущих обновлениях.

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

...