【问题标题】:Android: Alternative for context.getDrawable()Android:context.getDrawable() 的替代方案
【发布时间】:2015-03-03 23:27:42
【问题描述】:

我在我的项目中使用过这样的context.getDrawable()

Drawable greenProgressbar = context.getDrawable(R.drawable.custom_progressbargreen);

但是 Eclipse 给我一个错误,它需要 Minimum API level of 21。这意味着在快速谷歌搜索后,我的应用程序将只能在 Android 5.0 上使用。由于并非所有设备都使用此版本的 android,我希望有一个替代 context.getDrawable()

【问题讨论】:

    标签: java android eclipse android-drawable


    【解决方案1】:

    根据 SDK 22 文档,以前接受的方法已被弃用:

    在 android.os.Build.VERSION_CODES#JELLY_BEAN 之前,当此处传递的资源 ID 是另一个 Drawable 资源的别名时,此函数将无法正确检索最终配置密度。这意味着如果别名资源的密度配置与实际资源不同,则返回的Drawable的密度将不正确,导致缩放不良。

    正如this answer 中指出的,更好的解决方案是使用ContextCompatContextCompat.getDrawable(context, R.drawable.***)

    【讨论】:

    • 我现在接受了这个答案,因为它更相关:)
    【解决方案2】:

    在上下文后添加getResources()

    Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);
    

    【讨论】:

    • Resources.getDrawable 被弃用,取而代之的是 Context.getDrawable
    【解决方案3】:

    我遇到了同样的情况,我想引用 getDrawable() 方法,该方法现已弃用。

    我用了什么:

    myButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_btn_off));
    

    【讨论】:

      【解决方案4】:
      Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);
      

      【讨论】:

      • 已弃用。
      【解决方案5】:

      Kotlin 程序员的解决方案如下:

      val greenProgressbar = context!!.getDrawable(R.drawable.custom_progressbargreen)
      

      或(来自 API 22)

      val greenProgressbar = ContextCompat.getDrawable(R.drawable.custom_progressbargreen)
      

      【讨论】:

        【解决方案6】:
        AppCompatResources.getDrawable(context, R.drawable.*)
        

        【讨论】:

          【解决方案7】:

          你应该使用“getDrawable(id, this.getTheme())”。这种方法直到现在还没有被弃用。

          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
              view.setBackground(getResources().getDrawable(R.drawable.radioline,this.getTheme()));
          } else {
             view.setBackground(getResources().getDrawable(R.drawable.radioline));
          }
          

          【讨论】:

            【解决方案8】:

            我同意使用 ContextCompact.getDrawable(Context context, int resID)。它对我有用,我的应用针对 API 19。

            【讨论】:

              【解决方案9】:

              您也可以直接设置资源而不使用可绘制对象(Kotlin):

              btn.setImageResource(R.drawable.ic_XXX)
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-06-13
                • 2015-09-25
                • 2019-12-16
                • 2011-06-20
                • 2015-11-03
                • 2014-04-03
                • 2011-12-13
                • 2014-02-28
                相关资源
                最近更新 更多