我正在开发一个可能在晚上使用的Android应用程序。因此,我需要关闭按钮的背光。我怎样才能做到这一点?在我自己的手机上,背光会在一段时间后关闭,但在摩托罗拉Droid上我不认为会发生这种情况。
我正在使用唤醒锁来保持屏幕开启。我应该使用另一面旗帜吗?或者我该怎么做?
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, WAKE_LOCK_TAG);
mWakeLock.acquire();
非常感谢!
// Kaloer
答案 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来控制按钮的背光 - 对不起!