关于 Window.setAttributes(LayoutParams a) 的一些操作 全屏 ,设置亮度 关闭键盘灯等

本文介绍了一个Android应用示例,展示了如何通过编程方式调整设备的屏幕亮度和按键背光亮度。具体包括设置亮度的方法、如何使屏幕保持常亮等功能,并提供了一段完整的Java代码实现。

package com.example.testkeylight;

import android.app.Activity;
import android.os.Bundle;
import android.provider.Settings.SettingNotFoundException;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;

/**
 * http://developer.android.com/reference/android/view/WindowManager.
 * LayoutParams.html#BRIGHTNESS_OVERRIDE_OFF public static final float
 * BRIGHTNESS_OVERRIDE_OFF
 * 
 * Added in API level 8 Value for screenBrightness and buttonBrightness
 * indicating that the screen or button backlight brightness should be set to
 * the lowest value when this window is in front.
 * 
 * Constant Value: 0.0
 * 
 * @author sfshine 2013-4-27 下午3:40:32
 */
public class MainActivity extends Activity {

	private Window win;
	private LayoutParams winParams;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		win = getWindow();
		winParams = win.getAttributes();
		setLight();

	}

	public void openKeyLight(View view) {
		winParams.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL;
		win.setAttributes(winParams);
	}

	public void closeKeyLight(View view) {
		winParams.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF;

		win.setAttributes(winParams);

	}

	// 设置屏幕亮度
	public void setLight() {
		int curBrightnessValue = 100;
		try {
			curBrightnessValue = android.provider.Settings.System.getInt(
					getContentResolver(),
					android.provider.Settings.System.SCREEN_BRIGHTNESS);
		} catch (SettingNotFoundException e) {
			e.printStackTrace();
		}
		Log.e("TAG", curBrightnessValue + " ");

		WindowManager.LayoutParams layoutParams = win.getAttributes();
		layoutParams.screenBrightness = 0.01f; // 0 - 1 中间
												// 但是似乎在0.01一下才能看出明显的屏幕变暗
		win.setAttributes(layoutParams);

	}

	// 设置常亮
	public void setAllLight() {

		win.setFlags(WindowManager.LayoutParams.MATCH_PARENT,
				WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
	}
}


<think>我们正在讨论Android中设置窗口透明度的问题。根据用户提供的引用,特别是引用[1]和引用[2],我们可以找到设置窗口透明度的方法。引用[1]展示了如何通过WindowManager.LayoutParams设置窗口的alpha值(透明度)。其中,alpha=0.3f表示设置窗口透明度为0.3(30%不透明,70%透明)。引用[2]则解释了颜色值的格式,包括透明度(alpha)的十六进制表示,但用户的问题是关于整个窗口的透明度,而不是某个控件的背景透明度。因此,我们主要参考引用[1]的方法。用户要求设置窗口透明度为0.5(即50%不透明)。我们可以通过以下步骤实现:1.获取当前窗口的LayoutParams。2.设置alpha值为0.5f。3.将修改后的LayoutParams设置回窗口。注意:这种方法设置的是整个窗口的透明度,包括其内容(如按钮、文本等)也会变得半透明。代码示例(在Activity中):```java//设置窗口透明度为0.5(50%不透明)WindowManager.LayoutParamslayoutParams =getWindow().getAttributes();layoutParams.alpha=0.5f; //范围从0.0(完全透明)到1.0(完全不透明) getWindow().setAttributes(layoutParams);```另外,引用[3]和引用[4]提到了动画缩放默认值的修改,这与窗口透明度无关,因此我们不需要关注。注意:这种方法设置的透明度是全局的,会影响整个窗口。如果只想设置背景透明而内容不透明,可以考虑设置窗口背景为半透明颜色,例如: ```javagetWindow().setBackgroundDrawable(newColorDrawable(Color.argb(128,0,0,0)));//50%透明的黑色背景```但是,这种方法只会使窗口背景半透明,而窗口上的内容(如按钮、文本框)则不会透明。不过,根据用户的问题,他要求的是整个窗口的透明度,所以第一种方法更符合。因此,针对用户的问题,我们推荐使用设置LayoutParams的alpha属性。相关问题:1.如何恢复窗口的默认不透明度?2.设置窗口透明度后,如何保持部分控件(如按钮)完全不透明?3.除了代码设置,能否通过主题样式设置窗口透明度?</think>### Android 设置窗口透明度为 0.5 的实现方法 在 Android 中设置窗口透明度为 50% 的核心方法是操作 `WindowManager.LayoutParams` 的 `alpha` 属性。以下是具体实现步骤: #### 1. **Java 代码实现** ```java // 在 Activity 的 onCreate() 或需要修改透明度的位置添加 WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.alpha = 0.5f; // 0.5f 表示 50% 不透明度 getWindow().setAttributes(layoutParams); ``` **关键说明:** - `alpha` 值范围:`0.0f`(完全透明)到 `1.0f`(完全不透明) - `0.5f` 对应 50% 透明度(半透明效果) - 此操作会影响**整个窗口**(包括内容区域和系统装饰) #### 2. **XML 主题实现(可选)** 在 `styles.xml` 中定义半透明主题: ```xml <style name="TranslucentTheme" parent="Theme.AppCompat"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowAlpha">0.5</item> </style> ``` 在 `AndroidManifest.xml` 中应用主题: ```xml <activity android:name=".YourActivity" android:theme="@style/TranslucentTheme"/> ``` #### 注意事项: 1. **影响范围** 此设置会使窗口内**所有内容**(包括按钮、文本等)变为半透明。若只需背景透明,建议改用: ```java getWindow().setBackgroundDrawable(new ColorDrawable(Color.argb(128, 0, 0, 0))); // 50%透明黑色背景 ``` 2. **兼容性** `alpha` 属性在 Android 1.0+ 均可用,但 XML 中的 `windowAlpha` 需要 API 级别 21+。 3. **性能优化** 频繁修改透明度时,建议使用属性动画避免卡顿: ```java getWindow().getAttributes().alpha = 0.5f; getWindow().setAttributes(layoutParams); // 或使用 ValueAnimator 实现渐变效果 ``` > 引用说明: > 透明度数值 `0.5f` 的设置方法参考了 LayoutParams 的标准用法[^1],透明度值范围定义与颜色 ARGB 规范一致[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值