Установите яркость экрана Android в Kotlin в одну строку (по сравнению с Java) - PullRequest
0 голосов
/ 29 сентября 2018

Чтобы установить минимальную яркость экрана в Android Java:

final WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF;
getWindow().setAttributes(lp);

Чтобы изменить яркость экрана в Android Kotlin:

val lp = this.window.attributes
lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF
this.window.attributes = lp

Однако (как новичок в Kotlin) я былудивился, увидев, что эта строка также работает:

window.attributes.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF

Почему это работает?Есть ли нежелательные побочные эффекты с этим кодом?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

На самом деле, этот однострочный кусок не будет работать.Вы можете открыть его в IDE, чтобы увидеть, что он переводится приблизительно в

val lp = this.window.attributes
lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF
// this.window.attributes = lp — this one isn't called, explanation below

Kotlin не будет выполнять все вложенные set* вызовы за вас, поэтому он не будет вызывать метод this.window.setAttributes().И весь код, который применяет изменения к фактическому окну, запускается этим вызовом.

0 голосов
/ 29 сентября 2018

Эти три строки кода:

val lp = this.window.attributes
lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF
this.window.attributes = lp

И эта единственная строка:

window.attributes.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF

фактически одинакова.Вы просто используете переменную "lp" для хранения window.attributes и затем получаете доступ к screenBrightness с помощью "lp".Во втором случае вы обращаетесь к screenBrightness напрямую по window.attributes.

Есть ли нежелательные побочные эффекты с этим кодом?

Нет.Используйте то, что вам удобно.

...