dynamicResource

public static int dynamicResource(Context context, int newVersionAttrId, int oldVersionResId)

动态获取主题资源(基于 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));

Return

解析后的资源 ID

Parameters

context

上下文(用于解析主题属性,不能为 null)

newVersionAttrId

主题属性 ID(如 R.attr.rc_xxx)

oldVersionResId

固定资源 ID(如 R.drawable.xxx 或 R.color.xxx,用于传统主题)


public static int dynamicResource(int newVersionResId, int oldVersionResId)

动态获取主题资源(无需 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 参数的版本

注意:此方法返回的是属性 ID(现代化主题)或资源 ID(传统主题),如果需要立即使用解析后的实际资源 ID,请使用 dynamicResource 方法。

Return

现代化主题返回资源 ID;传统主题返回资源 ID

Parameters

newVersionResId

主题资源 ID(如 R.drawable.rc_xxx 或 R.color.rc_xxx)

oldVersionResId

固定资源 ID(如 R.drawable.xxx 或 R.color.xxx,用于传统主题)