如何从android中的另一个应用程序资源更改主题?

2024-04-29

我知道有一种方法可以通过在 styles.xml 中定义并像这样使用它来设置主题

setTheme(android.R.style.MyTheme);

但是,我想从我开发的另一个应用程序中获取主题。我知道资源名称,实际上我可以使用此代码块获取主题 id;

Resources res = getPackageManager().getResourcesForApplication("com.example.theme");
int resThemeId = res.getIdentifier("my_theme","style","com.example.theme");

当我调试时,我发现 resThemeId 不为零。

然后,我需要最后的命令来设置这个主题。在 super.onCreate() 函数之前,我尝试实现此方法,但似乎不起作用

setTheme(resThemeId);

但如果我写下面的语句,而不是这个,我工作得很好

setTheme(android.R.style.Theme_Holo_Light);

那么,我应该怎么做才能使用不同包资源中的主题呢?


那么,我应该怎么做才能使用不同包资源中的主题呢?

由于多种原因,您不应该这样做。我编写了一个简单的项目,表明只要包包含您的活动使用的资源,这确实是可能的。

See: https://github.com/jaredrummler/SO-41872033 https://github.com/jaredrummler/SO-41872033


基本上,您需要从活动返回包的资源:

public class MainActivity extends AppCompatActivity {

  Resources resources;

  @Override protected void onCreate(Bundle savedInstanceState) {

    int themeResId = getResources().getIdentifier("AppTheme", "style", "com.example.theme");
    if (themeResId != 0) {
      setTheme(themeResId);
    }

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }

  @Override public Resources getResources() {
    if (resources == null) {
      try {
        resources = getPackageManager().getResourcesForApplication("com.example.theme");
      } catch (PackageManager.NameNotFoundException e) {
        resources = super.getResources();
      }
    }
    return resources;
  }

}

这只是为了表明这是可能的。我再次建议您避免这种情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从android中的另一个应用程序资源更改主题? 的相关文章

随机推荐

  • ModemManager:mmcli 获取信号强度

    我无法检索 Sierre Wireless MC7304 上的信号强度 另外通过 mmcli 发送 AT 命令似乎不起作用 sudo mmcli m org freedesktop ModemManager1 Modem 0 signal
  • jquery 切换兄弟元素的可见性

    我在一个页面上有几个 div 每个 div 都有一个标题 我可以单击该标题来切换相应 div 的可见性 div 设置为display none默认情况下 我用过 ids在每个 div 的点击功能中 但是因为我在同一页面上有多个 div 我想
  • Typescript:声明与另一个变量具有相同类型的变量

    有没有办法用另一个变量的类型来声明一个变量 例如 我声明一个具有某种类型的类成员 然后我想在同一类型的函数中声明另一个变量 但我不想修改原来的声明 也不想重复它 看起来你应该能够做类似的事情 class Foo bar key string
  • 如何从扩展服务工作人员创建网络工作人员

    我将首先解释我想要实现的目标 我想创建一个扩展程序 可以在不同 chrome 窗口上的选项卡之间切换 并显示每个选项卡 X 时间 我发现了一个类似的扩展 但它是使用manifest V2完成的 并且不支持多个窗口 我想通过为每个窗口创建一个
  • Nestjs拦截并修改传出的http请求

    所以我可能错过了一些东西或者做错了一些事情 我有一个 NestJS 应用程序正在尝试向外部 API 发出 http 请求 我希望能够拦截此传出请求并在执行之前修改其标头 我尝试使用拦截器 但没有成功 传入的 http 请求被拦截 但传出的请
  • 由于权限被拒绝,无法绑定到某些端口

    在过去 3 个月左右的时间里 我遇到了随机错误 无法绑定身份服务器在本地开发工作站上运行的特定端口 起初我以为是我的机器坏了 所以我重置了所有东西 这在两个月内解决了这个问题 现在它又回来了 与此同时 其他开发人员也看到了同样的问题 我们所
  • Eclipse 调试器 - 跳转到或仅显示挂起的线程

    我有一个带有很多线程的 Java 应用程序 在调试时 当一个线程中的执行被断点停止时 在所有线程之间滚动以查找挂起的线程是非常烦人的 有没有办法 按钮 快捷键等 跳转到挂起的线程 或者更好 隐藏所有未挂起的线程 我同意这很烦人 而且答案非常
  • Python Pandas 检查某个值在同一天内是否出现多次

    我有一个 Pandas 数据框 如下所示 我想做的是检查一个电台是否有变量yyy以及同一天的任何其他变量 如station1 如果这是真的 我需要删除包含的整行yyy 目前我正在使用iterrows 并循环搜索该变量出现的日期 将变量更改为
  • django redis celery 和 celerybeats 的正确设置

    我一直在尝试设置 django celery redis celery beats 但它给我带来了麻烦 文档非常简单 但是当我运行 django 服务器 redis celery 和 celerybeats 时 没有打印或记录任何内容 我所
  • 如何使用ggplot2在地图上添加经度和纬度线?

    我现在正在使用绘制加拿大地图ggplot2 因为默认的投影方式是 aea 阿尔伯斯等积 所以地图上的经度和纬度都是直线 我想知道如何在地图上以 110W 100W 90W 和 50N 60N 70N 的形式显示经度和纬度 它们应该是曲线 多
  • 如何使用rest-api执行spring cloud任务

    我知道可以安排云任务 也可以使用要执行的流进行配置 作为一名开发人员 我想使用 Rest api 执行我的 Spring Cloud 任务 以便我可以按需执行任务 基本上我有一个工作流程管理系统 我们正在使用 control m 代理 所以
  • 如何使用 Gmail API、OAuth2 for Apps 脚本和域范围委派为 G Suite 域中的用户设置电子邮件签名

    这是我之前发布的问题 答案的后续内容 如何使用 Google 电子邮件设置 API 和 OAuth2 for Apps 脚本库为 Google Apps 域中的用户设置电子邮件签名 https stackoverflow com quest
  • 为什么模拟“open”并返回 FileNotFoundError 会引发 AttributeError: __exit__?

    通过模拟测试open with a FileNotFoundError raises AttributeError exit 为什么会发生这种情况以及我可以采取什么措施来解决它 以下代码打开一个简单的文本文件 如果文件丢失 它会生成一个默认
  • 直接从令牌获取 JWT 声明,ASP Net Core 2.1

    我正在开发 ASP Net Core 2 1 Web API 我已经在我的项目中成功实施了 JWT 有了授权一切都可以正常工作 通常 当我需要用户声明时 我知道我可以这样获取它们 例如电子邮件声明 var claimsIdentity Us
  • 解决加载解决方案时 Visual Studio 2008 崩溃的问题

    我已经通过 SVN 下载了 SubSonic 的源代码 当我尝试在 Visual Studio 2008 中打开该项目时 它会转换解决方案 加载所有项目 然后消失 并且不会出现错误消息 解决方案的后续加载也会执行相同的操作 如果我运行 de
  • 将度/分/秒转换为十进制坐标

    在我的代码的一部分中 我将十进制坐标转换为度 分 秒 然后使用 double coord 59 345235 int sec int Math Round coord 3600 int deg sec 3600 sec Math Abs s
  • 如何使用 EF 和数据注释使输入字段仅允许数字?

    我试图弄清楚是否有一种方法可以确保使用数据注释和实体框架仅允许数字输入 我正在使用以下代码 Required DisplayName Client No Column client no TypeName smallint public v
  • 如何在 DirectShow 或 Media Foundation 中拍摄静态照片

    有没有办法使用 DirectShow 或 Media Foundation API 制作照片 静态图像 我的视频捕捉工作正常 我可以捕捉第一帧并收工 但这不是照片 通常相机具有不同的视频和照片模式 其中照片模式可提供更高的分辨率 例如 我有
  • 如何在 html 助手中使用 asp.net mvc 3 razor 执行内联样式

    我想做这个 Html TextBoxFor x gt x BackgroundColor new style width 20px background color Model BackgroundColor 然而它不会渲染我的 Mode
  • 如何从android中的另一个应用程序资源更改主题?

    我知道有一种方法可以通过在 styles xml 中定义并像这样使用它来设置主题 setTheme android R style MyTheme 但是 我想从我开发的另一个应用程序中获取主题 我知道资源名称 实际上我可以使用此代码块获取主