Изменение размера дисплея системы программно Android N

Фон: Android N поставляется с функцией изменения системыDisplay Size из настроек, в дополнение к ранее присутствующей функции измененияFont Size.

Изменить размер дисплея:

Источник изображения: pcmag.com

Вопрос:

Если приложение имеетandroid.permission.WRITE_SETTINGS разрешение на изменение настроек, есть способы изменить размер шрифта системы программно, как указано вКак программно изменить настройки шрифта устройства: стиль шрифта и размер шрифта?, Однако я не мог найти способ изменить размер дисплея программно. Является ли это возможным?

Что я пробовал?

Я проверил возможные варианты в спискеSettings.System удобные функции, предусмотренные для изменения настроек программно.

Обновить:

Я открыл запрос функции для того же здесь:https://code.google.com/p/android/issues/detail?id=214124 , Если вы чувствуете, что это было бы полезно, пожалуйста, отметьте это.

Заранее спасибо за помощь!

Ответы на вопрос(2)

android:configChanges="density"

В деятельности / приложении:

public void adjustDisplayScale(Configuration configuration) {
    if (configuration != null) {
        Log.d("TAG", "adjustDisplayScale: " + configuration.densityDpi);
        if(configuration.densityDpi >= 485) //for 6 inch device OR for 538 ppi
            configuration.densityDpi = 500; //decrease "display size" by ~30
        else if(configuration.densityDpi >= 300) //for 5.5 inch device OR for 432 ppi
            configuration.densityDpi = 400; //decrease "display size" by ~30
        else if(configuration.densityDpi >= 100) //for 4 inch device OR for 233 ppi
            configuration.densityDpi = 200; //decrease "display size" by ~30
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        wm.getDefaultDisplay().getMetrics(metrics);
        metrics.scaledDensity = configuration.densityDpi * metrics.density;
        this.getResources().updateConfiguration(configuration, metrics);
    }
}

Вызовите его сразу после super.onCreate (..):

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    adjustDisplayScale( getResources().getConfiguration());

Это позволит установить размер дисплея между «меньшими» и «маленькими» настройками «размера дисплея», переопределяя любые настройки размера дисплея, установленные пользователем. Этосамостоятельно подстраивается правильно для устройств 4in, 5.5in, 6in и т.д.

Settings.System , Eсть [putConfiguration(ContentResolver cr, Configuration config)] (https://developer.android.com/reference/android/provider/Settings.System.html#putConfiguration(android.content.ContentResolver, android.content.res.Configuration)). Использование этого метода:

Удобная функция для записи пакета настроек, связанных с конфигурацией, изконфигурация объект.

Вконфигурация

Это включает как пользовательские параметры конфигурации (список локалей и масштабирование), так и конфигурации устройства (такие какрежимы ввода, Размер экрана а такжеориентация экрана).

Установить конфигурацию сSCREENLAYOUT_SIZE_MASKзначения для размера экрана. Это:

Биты SCREENLAYOUT_SIZE_MASK определяют общий размер экрана. Они могут быть одним изSCREENLAYOUT_SIZE_SMALL, SCREENLAYOUT_SIZE_NORMAL, SCREENLAYOUT_SIZE_LARGE, или жеSCREENLAYOUT_SIZE_XLARGE.

Я надеюсь, что это поможет вам.

 pRaNaY26 июн. 2016 г., 04:47
Спасибо @alanv. Я просто удаляю непроверенный код.
 alanv24 июн. 2016 г., 19:02
Это определенно не будет работать.
 Shobhit Puri26 июн. 2016 г., 01:36
@alanv Спасибо за внимание. Не похоже, что это работает. Можете ли вы привести этоПроект Android с открытым исходным кодом - Отслеживание проблем это правильное место, чтобы открыть запрос функции для того же или нам нужно запросить его где-нибудь еще? Спасибо pRaNay за усилия, чтобы помочь. К сожалению, это не похоже на работу.

Ваш ответ на вопрос