Android window中如何实时获取系统颜色 并动态刷新自己要添加的view
时间: 2024-12-19 12:21:11 浏览: 4
在Android中,为了实时获取系统的主题颜色并将其应用到View上,你可以通过`AppCompatDelegate`和`CurrentThemeUtils`来实现。以下是步骤:
1. 首先,在你的Activity或Fragment中初始化`AppCompatDelegate`:
```java
AppCompatActivity activity = (AppCompatActivity) context;
activity.setSupportActionBar(null); // 如果有ActionBar
// 获取当前的主题信息
AppCompatDelegate delegate = ((AppCompatActivity) context).getDelegate();
TypedValue typedValue = new TypedValue();
delegate.getThemeResId(typedValue, R.style.AppTheme); // 或者你的主题ID
int themeResourceId = typedValue.resourceId;
// 创建CurrentThemeUtils实例
CurrentThemeUtils currentThemeUtils = CurrentThemeUtils.from(context);
```
2. 使用`CurrentThemeUtils`来获取系统颜色,例如获取主色(Primary Color):
```java
int primaryColor = currentThemeUtils.getColor(R.attr.colorPrimary);
```
3. 当系统颜色改变时,你需要监听颜色主题的变化。可以使用`AppCompatDelegate.setDefaultNightMode()`来设置夜间模式,并注册一个主题变化的回调:
```java
delegate.registerComponentCallbacks(new ComponentCallback2() {
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.uiMode != Configuration.UI_MODE_NIGHT_UNDEFINED) {
updateViewColors(); // 更新View的颜色
}
}
@Override
public void onThemeChanged(@NonNull Resources.Theme newTheme) {
super.onThemeChanged(newTheme);
updateViewColors(); // 系统主题切换时也更新颜色
}
});
private void updateViewColors() {
// 根据primaryColor动态设置View的颜色,例如设置背景、文字颜色等
yourView.setBackgroundColor(primaryColor);
// 其他需要更新的颜色...
}
```
现在,你的View会随着系统颜色的变化而实时刷新。
阅读全文