关闭按钮的背光

时间:2009-12-27 14:05:23

标签: android

我正在开发一个可能在晚上使用的Android应用程序。因此,我需要关闭按钮的背光。我怎样才能做到这一点?在我自己的手机上,背光会在一段时间后关闭,但在摩托罗拉Droid上我不认为会发生这种情况。

我正在使用唤醒锁来保持屏幕开启。我应该使用另一面旗帜吗?或者我该怎么做?

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, WAKE_LOCK_TAG);
mWakeLock.acquire();

非常感谢!

// Kaloer

3 个答案:

答案 0 :(得分:4)

有一个黑客:

private void setDimButtons(boolean dimButtons) {
    Window window = getWindow();
    LayoutParams layoutParams = window.getAttributes();
    float val = dimButtons ? 0 : -1;
    try {
        Field buttonBrightness = layoutParams.getClass().getField(
                "buttonBrightness");
        buttonBrightness.set(layoutParams, val);
    } catch (Exception e) {
        e.printStackTrace();
    }
    window.setAttributes(layoutParams);
}

答案 1 :(得分:1)

我发现这是一个很老的问题,主要是在评论链接中回答,但为了让其他遇到此问题的人明白这一点,这是我自己的答案。

自API 8开始内置。(doc

float android.view.WindowManager.LayoutParams.buttonBrightness



这是我在我的一个应用程序中使用的有些修改/简化版本(不包括不相关的代码)。内部类需要防止在不支持它的旧平台上启动时崩溃。

private void nightMode() {
    Window win = getWindow();
    LayoutParams lp = win.getAttributes();
    if (prefs.getBoolean("Night", false))
        changeBtnBacklight(lp, LayoutParams.BRIGHTNESS_OVERRIDE_OFF);
    else changeBtnBacklight(lp, LayoutParams.BRIGHTNESS_OVERRIDE_NONE);
    win.setAttributes(lp);
}

private void changeBtnBacklight(LayoutParams lp, float value) {
    if (Integer.parseInt(Build.VERSION.SDK) >= 8) {
        try {
            new BtnBrightness(lp, value);
        } catch (Exception e) {
            Log.w(TAG, "Error changing button brightness");
            e.printStackTrace();
        }
    }
}

private static class BtnBrightness {
    BtnBrightness(LayoutParams lp, float v) {
        lp.buttonBrightness = v;
    }
}

答案 2 :(得分:0)

AFAIK,没有API来控制按钮的背光 - 对不起!