【问题标题】:Button setTextAppearance is deprecated按钮 setTextAppearance 已弃用
【发布时间】:2015-10-28 14:02:34
【问题描述】:

按钮 setTextAppearance(Context context, int resid) 已弃用

和 setTextAppearance(int resid) - 仅适用于 API 级别 23

我应该改用什么?

【问题讨论】:

  • 你在开发什么 api
  • 您的问题到底是什么?在新的 Android 版本上调用旧方法将在内部调用新方法,因此您最终会得到相同的结果。

标签: android deprecated


【解决方案1】:

已弃用意味着将来有时会放弃对它的支持,但它仍按预期工作。在较旧的 API 上,没有其他选择,因为新的 setTextAppearance(int resid) 仅在 API 级别 23 中发布。

如果想长期安全,可以使用如下代码:

if (Build.VERSION.SDK_INT < 23) {
    yourButton.setTextAppearance(context, resid);
} else {
    yourButton.setTextAppearance(resid);
}

此代码在 API 级别 23 或更高级别的手机上首选新版本,但在 API 级别 23 不可用时使用旧版本。

【讨论】:

    【解决方案2】:

    我要和@Daniel Zolnai 说同样的话。但不要在代码中的所有位置检查Build.VERSION&gt;SDK_INT &lt; 23。把它放在一个地方,这样您以后就可以很容易地删除它或对其进行更改。那么该怎么做呢?我会为yourButton 案例做这个。

    1. 永远不要像这样使用Button 或android 提供的任何其他视图。我这么说是因为将来你需要调整一些东西,因此最好有自己的MyButton 或类似的东西。所以创建MyButton 扩展Button

    2. MyButton中,输入以下代码:

      public void setTextAppearance(Context context, int resId) {
          if (Build.VERSION.SDK_INT < 23) {
              super.setTextAppearance(context, resId);
          } else {
              super.setTextAppearance(resId);
          }
      }
      


    这样您就可以始终使用setTextAppearance,而无需担心检查 BUILD 版本。如果将来您打算删除这整个东西,那么您只需在一个地方refactor。这有点工作,但从长远来看,这会对您有很大帮助,并且会减少一些维护噩梦。

    【讨论】:

    • 我们能否确定TextView.setTextAppearance(int resId) 不会被系统调用,从而导致对super.. 的双重调用?
    • 是的。只有 API setTextAppearance(int resId)。没有对super 的双重调用。
    • 你的意思是 API >= 23 个调用only STA(int)only API STA(context, int),对吧? :) 顺便说一句,系统何时调用这些方法?
    • 抱歉 :) 好吧,系统不会调用这些方法,但是当我们想设置文本外观时,我们会调用。
    • 哦,真的吗? xml属性没有办法告诉系统去ca它吗?好吧,在那种情况下这很容易:)
    猜你喜欢
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2014-02-12
    • 2019-09-30
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多