2011-01-19 144 views
7

我要动态地更改按钮的样式,即在Java代码中,是这样的:如何在Android中动态更改按钮样式?

((Button)findViewById(id)).setStyle("@styles/foo") 

<resources> 
    <style name="foo"> 
     <item name="android:adjustViewBounds">true</item> 
     <item name="android:maxHeight">100px</item> 
     <item name="android:maxWidth">200px</item> 
    </style> 
</resources> 

我还没有看到什么样的setStyle,所以:

我一定要改变每一个属性或者我可以改变整个风格?

回答

0

你可能也想看看9个图像。这些对于根据运行应用程序的当前设备调整与您的小部件或按钮相关的图像大小和文本非常有用。

9 patch

9 patch draw tool

+0

我知道这件事,但非常感谢。我给出的样式示例不是一个好例子,因为它不是我想要应用到按钮上的那个,它只是一种发明的样式。我想改变阴影,文字颜色/大小等等。 – DarthRoman 2011-01-20 16:48:18

11

要指定一个风格类似这样的

<style name="ButtonHOLO" parent="android:Widget.Button"> 
     <item name="android:background">@drawable/btn_default_holo_dark</item> 
     <item name="android:minHeight">@dimen/calc_btn_h</item> 
     <item name="android:minWidth">@dimen/calc_btn_w</item> 
     <item name="android:textColor">#ffffff</item> 
</style> 

一个按钮动态,你需要同时使用setBackgroundResource()和setTextAppearance()函数。例如: -

btn.setBackgroundResource(R.drawable.btn_default_holo_dark); 
btn.setTextAppearance(context, R.style.ButtonHOLO); 

其中

btn_default_holo_dark

是描述你的按钮选择.xml文件的名称。

+0

这应该是公认的答案! – 2017-10-10 09:07:47

1

我发现绕过这个明显缺陷的最简单方法是制作按钮。让他们其中之一Visibility.gone。然后简单地将Visibility从另一个更改为gone,并通过Visibility.visible激活第一个。

我不太喜欢这个解决方案,但它比我目前找到的替代品更快,更安全。