dynamic Resource
动态获取主题资源(基于 Context 解析)
此方法根据当前激活的主题自动选择对应的资源:
- 现代化主题:从主题属性(Theme Attribute)中动态解析资源 ID,支持多主题切换
- 传统主题:直接返回指定的固定资源 ID,保持向后兼容
适用场景:
- 在 Java/Kotlin 代码中动态获取需要主题适配的资源
- 需要在运行时根据当前主题选择不同资源的场景
- 自定义 View 或 Adapter 中需要加载主题相关的图片、颜色等资源
使用示例:
// 获取背景资源:现代化主题使用主题属性,传统主题使用固定资源
int bgResId = IMKitThemeManager.dynamicResource(
context,
R.attr.rc_conversation_bg, // 主题属性
R.drawable.rc_old_bg // 固定资源(用于传统主题)
);
view.setBackgroundResource(bgResId);
// 获取颜色资源
int colorResId = IMKitThemeManager.dynamicResource(
context,
R.attr.rc_text_primary, // 主题属性
R.color.rc_old_text_color // 固定颜色(用于传统主题)
);
textView.setTextColor(getResources().getColor(colorResId));
Content copied to clipboard
Return
解析后的资源 ID
Parameters
context
上下文(用于解析主题属性,不能为 null)
new Version Attr Id
主题属性 ID(如 R.attr.rc_xxx)
old Version Res Id
固定资源 ID(如 R.drawable.xxx 或 R.color.xxx,用于传统主题)
动态获取主题资源(无需 Context 的快速版本)
此方法是 dynamicResource 的轻量级版本,适用于 XML 布局文件或无需立即解析的场景。
- 现代化主题:直接返回主题属性 ID,由系统在渲染时自动解析
- 传统主题:返回固定资源 ID
适用场景:
- XML 布局文件中需要根据主题类型选择资源的场景(如 android:background)
- 延迟解析场景,资源 ID 会在后续使用时由 Android 系统自动解析
- 无法获取 Context 但需要资源 ID 的场景
使用示例:
// 在代码中使用(系统会自动解析属性)
view.setBackgroundResource(
IMKitThemeManager.dynamicResource(R.attr.rc_bg, R.drawable.rc_old_bg)
);
// 注意:返回的可能是属性 ID,需要系统自动解析
// 如果需要立即获取解析后的资源,请使用带 Context 参数的版本
Content copied to clipboard
注意:此方法返回的是属性 ID(现代化主题)或资源 ID(传统主题),如果需要立即使用解析后的实际资源 ID,请使用 dynamicResource 方法。
Return
现代化主题返回资源 ID;传统主题返回资源 ID
Parameters
new Version Res Id
主题资源 ID(如 R.drawable.rc_xxx 或 R.color.rc_xxx)
old Version Res Id
固定资源 ID(如 R.drawable.xxx 或 R.color.xxx,用于传统主题)