Android 調節螢幕亮度問題

來源:互聯網
上載者:User

研究調節螢幕亮度時遇到的問解決方案如下:

1、可以通過擷取當前Activity 的WindowManager.LayoutParams 屬性,然後設定其screenBrightness的值即可;

screenBrightness
的取值範圍在[0,1]之間,具體可以如下操作:

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

2、有時我們需要用一個Seekbar控制項來動態控制螢幕的亮度。

  首先擷取系統螢幕的最大值,然後設定seekbar的setMax。

  /**     * 擷取螢幕亮度     */    private int getScreenBrightness() {        int nowBrightnessValue = 0;        ContentResolver resolver = getContentResolver();        try {            nowBrightnessValue = android.provider.Settings.System.getInt(resolver,                    Settings.System.SCREEN_BRIGHTNESS);        } catch (Exception e) {            e.printStackTrace();        }        return nowBrightnessValue;    }

然後在調節螢幕亮度函數中與seekbar進行綁定

 private void setScreenLight(View popupView) {        mBrightnessProgress = getScreenBrightness();        final SeekBar mSeekBarLight = (SeekBar) popupView.findViewById(R.id.seekBarLight);        mSeekBarLight.setProgress(mBrightnessProgress);        mSeekBarLight.setMax(MAX_BRIGHTNESS);        mSeekBarLight.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {            @Override            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {                // TODO Auto-generated method stub                if (fromUser) {                    WindowManager.LayoutParams lp = getWindow().getAttributes();                    lp.screenBrightness = (float) (progress / (MAX_BRIGHTNESS * 1.0));                    getWindow().setAttributes(lp);                }            }            @Override            public void onStartTrackingTouch(SeekBar arg0) {                // TODO Auto-generated method stub            }            @Override            public void onStopTrackingTouch(SeekBar arg0) {                // TODO Auto-generated method stub            }        });
}

3、當我們遇到把Activity做為子Activity潛入到TabActivity 或者 ViewGroup 類容器時,通常上面的方法設定無法取得成功,

活動捲軸的過程中,螢幕亮度不發生改變。

因為調節亮度範圍發生了改變,之前是在Activity裡面對亮度修改, 而現在是作為子activity對TabActivity或ViewGroup 容器進行修改,因此不能成功,需要

通過getParent()方法擷取器Parent,然後設定。

private void setScreenLight(View popupView) {        mBrightnessProgress = getScreenBrightness();        final SeekBar mSeekBarLight = (SeekBar) popupView.findViewById(R.id.seekBarLight);        mSeekBarLight.setProgress(mBrightnessProgress);        mSeekBarLight.setMax(MAX_BRIGHTNESS);        mSeekBarLight.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {            @Override            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {                // TODO Auto-generated method stub                if (fromUser) {                    WindowManager.LayoutParams lp = getParent().getWindow().getAttributes();                    lp.screenBrightness = (float) (progress / (MAX_BRIGHTNESS * 1.0));                    getParent().getWindow().setAttributes(lp);                }            }            @Override            public void onStartTrackingTouch(SeekBar arg0) {                // TODO Auto-generated method stub            }            @Override            public void onStopTrackingTouch(SeekBar arg0) {                // TODO Auto-generated method stub            }        });}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.