按钮setTextAppearance方法已经被弃用,需要使用新的替代方法。

6

Button setTextAppearance(Context context, int resid) 已经被弃用。

setTextAppearance(int resid) - 仅适用于API级别23及以上版本。

应该使用什么替代方案呢?


你正在开发哪个 API? - Tim
你的问题具体是什么?在新的Android版本上调用旧方法将在内部调用新方法,因此最终会得到相同的结果。 - Froyo
2个回答

8

过时(Deprecated)意味着支持将来会被取消,但它仍然按预期工作。在旧的 API 上,由于新的 setTextAppearance(int resid) 仅在 API 级别 23 中发布,因此没有替代方案。

如果您想要长时间保持安全性,可以使用以下代码:

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

这段代码在 API 级别大于等于 23 的手机上优先使用新版本,但当 API 级别为 23 的版本不可用时会使用旧版本。

8
我将与@Daniel Zolnai说的一样。但是不要在代码中的所有地方都进行Build.VERSION>SDK_INT < 23检查。将其放在一个位置,这样你将来容易删除它或进行更改。那么如何做呢?我将为yourButton情况执行此操作。
  1. Never use Button or any other view provided by android just like that. I say this, because in the future you will need to tweak something and hence it's better to have your own MyButton or something of that sort. So create MyButton extends Button.

  2. Inside MyButton, put the below code:

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


这样你就可以永远使用setTextAppearance,而不需要担心检查BUILD版本。如果将来计划删除整个内容,则只需在一个地方进行重构。 这是一些工作,但从长远来看,这将对您有所帮助,并减少一些维护噩梦。


我们能确定系统不会调用 TextView.setTextAppearance(int resId),从而导致对 super.. 的双重调用吗? - guy_m
是的。只有 API < 23 才会调用 setTextAppearance(int resId)。没有对 super 的双重调用。 - Henry
你的意思是API >= 23只调用STA(int),而API < 23只调用STA(context, int),对吗? :) 顺便问一下,系统什么时候会调用这些方法呢? - guy_m
抱歉 :) 好的,系统不会调用这些方法,但是当我们想要设置文本外观时,我们会调用它们。 - Henry
哦,真的吗?没有办法通过XML属性告诉系统去执行它吗?那么,在这种情况下,这很容易 :) - guy_m

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接