【问题标题】:Turn off backlight of the buttons关闭按钮的背光
【发布时间】:2017-01-28 06:44:05
【问题描述】:

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

我正在使用唤醒锁来保持屏幕开启。我应该使用另一个标志还是如何做到这一点?

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

非常感谢!

//卡洛尔

【问题讨论】:

  • 您找到解决此问题的方法了吗?我还想关闭按钮上的背光灯。
  • 是的,我做到了,或者它是 Android 2.2 中的一个新功能。看这里stackoverflow.com/questions/2892160/…

标签: android


【解决方案1】:

有一个hack:

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);
}

【讨论】:

  • 我不知道我是否会称之为“黑客”。这是反射。
  • 这很有趣。有没有办法从活动外部访问getWindow(),比如在服务中?
【解决方案2】:

我看到这是一个老问题,主要在评论链接中得到回答,但为了让遇到这个问题的其他人清楚,这是我自己的答案。

从 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;
    }
}

【讨论】:

  • 有没有办法从活动外部访问getWindow(),比如在服务中?
【解决方案3】:

AFAIK,没有 API 来控制按钮的背光 - 抱歉!

【讨论】:

  • 好的.. 谢谢你的回答:)
  • @pengwang,能否请您在列表中粘贴此 API 的链接?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多