android:将drawableTop图标设置在其原始位置

android:将drawableTop图标设置在其原始位置,android,button,layout,Android,Button,Layout,我在应用程序中有一个按钮,可以调用某个功能,在此之前,系统将检查该特定功能是否可用,如果不可用,它将实现以下功能: XML: 见解: 按钮:已启用 按钮:禁用(措辞应为“不支持…”) 问题: 一旦按钮被禁用,则使用.setBakgroundResource更改按钮的背景,然后按钮可以更改其背景资源,但图标会向上显示 如何将图标设置为保持在原来的位置,而只更改按钮上的背景和文本?(至少图标不会上升到按钮顶部) 谢谢 不确定,但我打赌设置新的LayoutParams时,padding值可能会被擦除。

我在应用程序中有一个按钮,可以调用某个功能,在此之前,系统将检查该特定功能是否可用,如果不可用,它将实现以下功能:

XML: 见解: 按钮:已启用

按钮:禁用(措辞应为“不支持…”)

问题: 一旦按钮被禁用,则使用
.setBakgroundResource
更改按钮的背景,然后按钮可以更改其背景资源,但图标会向上显示

如何将图标设置为保持在原来的位置,而只更改按钮上的背景和文本?(至少图标不会上升到按钮顶部)


谢谢

不确定,但我打赌设置新的
LayoutParams
时,
padding
值可能会被擦除。您可以通过注释这一行来轻松检查这一点-

speakBtn.setLayoutParams(params);
如果有效,您可以尝试在该行之后手动设置填充-

speakBtn.setPadding(0, 15, 0, 0);

顺便说一句,请记住,应该将
维度
值存储在dimens资源文件中(即
dimens.xml

我认为这会发生bcz文本长度更改,在您的情况下,您必须制作两个图像并设置为按钮背景。哦,是的……我已经实现了您的建议,并使用了15,它会将图标向下移动一点…可能正如Haresh指出的,文本的长度会变长和扭曲…我随机尝试使用真实设备,发现它需要设置填充为0、25、0,0只能使用相同的设置使图标顶部与其他按钮对齐。嗯,
15
硬编码也可能是15px而不是15dp。这就是为什么您应该拥有一个dimen资源并将其引用为getResources()。例如getDimension(R.dimen.dimen15)。它可以工作!!!我在dimens资源中设置了它!它真的很管用!!非常感谢你的帮助!!
speakBtn.setLayoutParams(params);
speakBtn.setPadding(0, 15, 0, 0);