前言:上一篇文章中讲述了一下安卓音量大小调节的实现,既然如此在这一篇文章中便一起来熟悉下屏幕亮度大小的调节实现方法吧。
安卓屏幕亮度调节可以分为三个层次,分别是系统屏幕亮度调节、APP屏幕调节和当前屏幕调节,系统调节顾名思义是三者里面全局性最高的,可以把其看作系统设置中的亮度调节;APP屏幕调节,安卓系统本身是不支持统一改变某一APP的屏幕亮度的,因此并没有提供相应的API,但是可以通过修改系统屏幕亮度或者当前屏幕亮度来实现;第三个则是咱们今天的主角,改变当前屏幕的亮度。
幸运的是,安卓系统针对如何改变当前屏幕的亮度提供了相应的接口,我们可以通过api快速的实现屏幕亮度,下面介绍一种常见的写法:
Window window = activity.getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.screenBrightness = screenBrightness;
window.setAttributes(params);
其中,screenBrightness的取值范围是0到1
前面提到过,系统屏幕亮度调节是全局性最高的,因此当前屏幕的亮度是受到系统亮度影响的,可以通过这段代码(
Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
)获取系统当前亮度,其取值范围是0-255的int类型
我们假定亮度值变动范围是5,也就是每次增加或者减小5,让我们一起编写一个小demo来熟悉下:
第一步,界面实现
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="#ffff11"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:layout_margin="10dp"
android:textColor="#000000"
android:onClick="screenUp"
android:text="亮"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:layout_margin="10dp"
android:textColor="#000000"
android:onClick="screenDown"
android:text="暗"
/>
</LinearLayout>
第二步,定义变量,当前屏幕亮度并获取当前系统亮度
private int targetBrightness;//屏幕当前亮度
targetBrightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
第三步,定义方法及逻辑实现
首先,屏幕亮度增加部分代码如下:
public void screenUp(View view) {
// TODO Auto-generated method stub
Window window = this.getWindow();
WindowManager.LayoutParams params = window.getAttributes();
targetBrightness+=5;
if(targetBrightness>=255){
targetBrightness=255;
}
params.screenBrightness = targetBrightness/255f;
window.setAttributes(params);
}
减小部分代码:
public void screenDown(View view) {
// TODO Auto-generated method stub
Window window = this.getWindow();
WindowManager.LayoutParams params = window.getAttributes();
targetBrightness-=5;
if (targetBrightness<=0) {
targetBrightness=1;
}
params.screenBrightness = targetBrightness/255f;
window.setAttributes(params);
}
细心的朋友可以看到在两个方法中我都做了一个if判断,这是因为系统亮度的取值范围是0-255,而如果params.screenBrightness的取值小于0的话,则是自适应系统亮度,便无法达到我们想要的效果
最后,测试大功告成