【问题标题】:Deprecated method, but replacing method requires higher api [duplicate]不推荐使用的方法,但替换方法需要更高的api [重复]
【发布时间】:2012-10-25 02:59:41
【问题描述】:

我想使用view.setBackgroundDrawable(Drawable),但这个方法是deprecated。它被替换为.setBackground(Drawable)。但我的最低 API 8 无法处理。它告诉我将最小值设置为 API 16。

有没有办法根据设备的 API 使用不同的方法?

类似

if(API<16)
{
  view.setBackgroundDrawable(Drawable)
}
else
{
  view.setBackground(Drawable)
}

或者我真的必须更改最低 API 才能做到这一点?

【问题讨论】:

    标签: android deprecated


    【解决方案1】:

    setBackgroundDrawable 已被弃用,但它仍然有效,因此您可以直接使用它。但是如果你想完全正确,你应该使用这样的东西

    int sdk = android.os.Build.VERSION.SDK_INT;
    if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
        setBackgroundDrawable()
    } else {
        setBackground();
    }
    

    为此,您需要将 buildTarget api 16 和 min build 设置为 7 或类似的值。

    【讨论】:

    • 在这段代码中......警告仍然会显示,您可以使用抑制警告来删除它!
    • 其实我需要这两个:@SuppressLint("NewApi") @SuppressWarnings("deprecation")
    • 是的,我忘了提到 Lint 警告
    • 另一种禁用 lint 检查的方法是将//noinspection deprecation 放在 setBackgroundDrawable() 之前的行上
    • @BenClayton 我从来没有对noinspection 了解过,谢谢
    【解决方案2】:

    类似这样的:

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN){
       view.setBackgroundDrawable(Drawable)
    } else {
       view.setBackground(Drawable)
    }
    

    【讨论】:

      【解决方案3】:

      您可以根据 API 版本使用不同的方法。

      例如:

      if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) {
              //Methods for version <8 (FROYO)
      } else {
              // Methods for version >=8
      }
      

      在此处将您的 targetSDkversion 设置为任何更高版本(例如此处为 16)并将您的 minsdkversion 设置为更低版本(API 7)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-30
        • 1970-01-01
        • 2016-02-08
        • 2023-02-03
        • 2019-09-15
        • 2021-11-16
        相关资源
        最近更新 更多