【问题标题】:How to set ImageButton property of app:srcCompat="@drawable/pic" programmatically?如何以编程方式设置 app:srcCompat="@drawable/pic" 的 ImageButton 属性?
【发布时间】:2016-07-05 21:13:22
【问题描述】:

如何设置ImageButton的属性

app:srcCompat="@drawable/pic"

以编程方式?

类似于myImageButton.setBackgroundResource(R.drawable.eng2); 但属于app:srcCompat 的属性。

【问题讨论】:

    标签: android android-appcompat android-imagebutton


    【解决方案1】:

    你需要使用setImageResource()方法。

    imageButton.setImageResource(R.drawable.eng2);

    【讨论】:

    • Kotlin 也一样
    • 这是否意味着我们不对 xml 使用 srcCompat 更改?
    【解决方案2】:

    首先,确保您处理的是AppCompatImageView,而不是普通的ImageView

    AppCompatImageView iv = (AppCompatImageView)findViewById(....);
    

    然后你可以这样做:

    iv.setImageResource(R.drawable.pic);
    

    查看其他公共方法in docs

    【讨论】:

    • 我使用 'ImageButton' 和 'app:srcCompat="@drawable/pic"' 但设置为 'setImageResource(R.drawable.pic);'工作正常。谢谢
    • 构建工具可能正在“运行中”替换类
    • 嘿 Marcin,你知道为什么我们需要以编程方式更改图像而不是给出 app:srcCompa="drawable/" 之间的路径
    • 我想添加到这个答案,我必须使用AppCompatImageButton 而不是ImageButton
    • @Zhang 那可能是因为你的视图被膨胀的活动没有扩展 AppCompatActivity
    【解决方案3】:

    使用setImageResource() 应该以向后兼容的方式获取其资源,而无需任何进一步的努力。

    但是,如果您使用setImageDrawable(),则 ImageView/ImageButton 不会帮助任何向后兼容,并且由您来提供向后兼容的可绘制对象,这对于例如。如果使用VectorDrawables。以下将以这种方式加载和设置可绘制对象:

    val drawable = AppCompatResources.getDrawable(context, resourceId)
    image.setImageDrawable(drawable)
    

    【讨论】:

      【解决方案4】:

      我猜其他方法已经过时,在写这篇文章时不起作用,

      iv_yourImageView.setImageDrawable(getResources().getDrawable(R.drawable.your_drawable));
      

      这会起作用。

      【讨论】:

        【解决方案5】:

        没有,提供的解决方案对我有用。我使用的是 ImageView。最后,我发现使用setBackgroundResource() 对我有用。

        view.setBackgroundResource(R.drawable.ic_star_black_18dp)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-31
          • 2021-06-22
          • 2023-01-03
          • 1970-01-01
          • 2021-05-20
          相关资源
          最近更新 更多