【问题标题】:I need to dynamically modify my drawables programatically我需要以编程方式动态修改我的drawable
【发布时间】:2019-07-31 10:53:17
【问题描述】:

我必须将一个可绘制对象应用到一个按钮,但是在我单击按钮之前第一次发生的情况下,即使条件是条件 b,可绘制的按钮总是以 R.drawable.up 的形式出现。

int btnDrawable = R.drawable.up;

if(Condition a){
  btnDrawable = R.drawable.up;
}
else if(Condition b){
  btnDrawable = R.drawable.down;
}

mbtn.setBackground(getResources().getDrawable(btnDrawable));

【问题讨论】:

  • 请提供一个最小的、可重现的示例,以便我们可以帮助您解决您面临的问题。
  • 条件都不为真或两者都为真。只需尝试调试这两个条件。
  • 让我们以这个为例,我有一个弹出对话框,当我打开它时,条件是“b”,所以有一个按钮应该带有“向下”drawable,但在这种情况下它是始终显示“向上”可绘制按钮,直到我触摸它,它在 onTouch 方法中也具有相同的条件。
  • 你介意发布条件 a 和 b 吗?

标签: java android android-drawable android-button


【解决方案1】:

可能只是 Condition a 也是真的,所以它从不检查 Condition b

你试过调试吗? (点击第一个if所在行的右边,然后运行bu点击运行图标旁边的bug图标。一旦代码停止,检查condition a和condition b的值)

【讨论】:

  • 我的 onTouch 方法具有与上述相同的条件,因此当我触摸按钮时,它带有正确的可绘制对象,但为什么最初我弄错了?
  • 你能详细说明一下吗?是不是第一次点击有a为真,然后非常点击a为假,b为真,但不改变该视图的背景?
【解决方案2】:

放

if(Condition a){
  btnDrawable = R.drawable.up;
}
else if(Condition b){
  btnDrawable = R.drawable.down;
}

mbtn.setBackground(getResources().getDrawable(btnDrawable));

在onClick() 或onTouch() 方法中。它应该工作。另外,正如@Miku 所说,也许条件 a 始终为真,您可能需要附加一个调试器并检查它。

*如果还是不行,建议你粘贴完整代码。

【讨论】:

  • 不,实际上我必须在其他地方用一个值初始化 btnDrawable,它给了我一个编译时错误,即未初始化。
  • 这就是为什么您应该主要发布完整的代码,这样人们会更快地发现错误。据我们所知,仅从您发布的 sn-p 来看,代码可能位于从 onCreate 一直到 onDestroy 的任何位置。
【解决方案3】:

我把上面的代码放在了错误的地方,现在我在设置视图时调用了这段代码,它对我来说很好用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    相关资源
    最近更新 更多