Android 7.1 亮度调节之BrightnessController
通过“设置->显示->亮度”可以调节屏幕亮度,当点击“亮度”这个选项时,会弹出如下菜单:
实际上这是一个系统Activity,下面就先来分析一下是如何启动这个Activity的。
启动亮度调节Activity
“设置->显示”的布局文件是"display_settings.xml":
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:title="@string/display_settings"//亮度
settings:keywords="@string/keywords_display">
<PreferenceScreen
android:key="brightness"
android:title="@string/brightness"
settings:keywords="@string/keywords_display_brightness_level">
//通过Intent启动SHOW_BRIGHTNESS_DIALOG
<intent android:action="android.intent.action.SHOW_BRIGHTNESS_DIALOG" />
</PreferenceScreen>
...以下省略
当点击“亮度”的PreferenceScreen时,会通过Intent启动 “android.intent.action.SHOW_BRIGHTNESS_DIALOG”。这个action对应的是什么呢?可以在“frameworks\base\packages\SystemUI\AndroidManifest.xml”中找到答案:
<activity
android:name=".settings.BrightnessDialog"
android:label="@string/quick_settings_brightness_dialog_title"
android:theme="@android:style/Theme.DeviceDefault.Dialog"
android:finishOnCloseSystemDialogs="true"
android:launchMode="singleInstance"
android:excludeFromRecents="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.SHOW_BRIGHTNESS_DIALOG" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
可以看到,这个action会启动SystemUI的"BrightnessDialog"。 那么接下来就分析一下BrightnessDialog这个Activity吧。
BrightnessDialog
这个Activity非常简单,我都在犹豫要不要贴代码。。。
public class BrightnessDialog extends Activity {
private BrightnessController mBrightnessController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Window window = getWindow();
window.setGravity(Gravity.TOP)