android setbackgroundresource 动态设置,android - setBackgroundResource() discards my XML layout attribut...

本文讨论了在Android中遇到的一个问题,即使用LayerList资源drawable作为视图背景时,可能会导致内边距异常。虽然作者认为这可能是一个代码bug,但并未深入调查。为解决这个问题,作者提出了一个临时解决方案,即在设置背景后保存并恢复视图的内边距。此外,还提供了一个备选方案,通过设置统一的内边距值来避免问题的发生。
摘要由CSDN通过智能技术生成

I ran into this issue as well. Presumably you're using a LayerList resource drawable? That's what I was using. Unfortunately, I found no "real" way of fixing it, it seems like a bug in the code, but I didn't chase it down. However, I was lucky in the sense that I was setting the "buggy" background after my view had already been rendered properly, so it was just a matter of saving then restoring the padding values after the background is set, e.g:

if(condition) {

int bottom = theView.getPaddingBottom();

int top = theView.getPaddingTop();

int right = theView.getPaddingRight();

int left = theView.getPaddingLeft();

theView.setBackgroundResource(R.drawable.entry_bg_with_image);

theView.setPadding(left, top, right, bottom);

}

EDIT:

As an alternative, you don't have to use the previous values of padding, you can also use a dimension value:

int pad = resources.getDimensionPixelSize(R.dimen.linear_layout_padding);

theView.setBackgroundResource(R.drawable.entry_bg_with_image);

theView.setPadding(pad, pad, pad, pad);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值