Android 不推荐使用按钮setTextAppearance

Android 不推荐使用按钮setTextAppearance,android,deprecated,Android,Deprecated,不推荐使用按钮setTextAppearance(上下文,int resid) 和setTextAppearance(int resid)-仅适用于API级别23 我应该改用什么?弃用意味着将来有时会放弃对它的支持,但它仍能按预期工作。在旧的API上,没有其他选择,因为新的setTextAppearance(intresid)仅在API级别为23时发布 如果您想长期保持安全,可以使用以下代码: if (Build.VERSION.SDK_INT < 23) { yourButton

不推荐使用按钮setTextAppearance(上下文,int resid)

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


我应该改用什么?

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

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

if (Build.VERSION.SDK_INT < 23) {
    yourButton.setTextAppearance(context, resid);
} else {
    yourButton.setTextAppearance(resid);
}
if(Build.VERSION.SDK\u INT<23){
yourButton.settext外观(context,resid);
}否则{
yourButton.settext外观(resid);
}

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

我要说的与@Daniel Zolnai相同。但是不要在代码中的所有地方都进行检查
Build.VERSION>SDK\u INT<23
。把它放在一个地方,这样以后你就可以很容易地删除它或对它进行更改。那么怎么做呢?我将为
yourButton
案例执行此操作

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

  • MyButton
    内,输入以下代码:

    public void setTextAppearance(Context context, int resId) {
        if (Build.VERSION.SDK_INT < 23) {
            super.setTextAppearance(context, resId);
        } else {
            super.setTextAppearance(resId);
        }
    }
    
    public void settext外观(上下文上下文,int resId){
    如果(Build.VERSION.SDK_INT<23){
    super.settext外观(context,resId);
    }否则{
    super.Settext外观(剩余);
    }
    }
    


  • 通过这种方式,您可以始终使用
    settextearance
    ,而无需担心检查生成版本。如果将来,你打算删除整个东西,那么你必须在一个地方重构。这是一点工作,但从长远来看,这将对您有很大帮助,并将减少一些维护噩梦。

    您为解决什么问题开发了什么api?在新的Android版本上调用旧方法将在内部调用新方法,因此最终得到相同的结果。我们是否可以确保系统不会调用
    TextView.setTextAppearance(int resId)
    ,从而导致对
    super..
    的双重调用?是的。只有API<23才会调用
    setTextAppearance(intresid)
    。没有双重调用
    super
    。您的意思是API>=23次调用仅
    STA(int)
    ,并且只有API<23次调用
    STA(context,int)
    ,对吗?:)顺便说一句,系统什么时候调用这些方法?很抱歉:)嗯,系统不调用这些方法,但是我们会调用,当我们想要设置文本外观时。哦,真的吗?xml属性不会告诉系统对其进行ca吗?那么,在这种情况下,这很容易:)