如何以编程方式添加/删除样式到Android按钮?是否可以在运行时应用样式?
我有两个看起来像这样的按钮
---------- ---------- | Button A | | Button B | ---------- ----------
我想要做的是当点击一个按钮(让我们说按钮B),它运行一些代码,然后将按钮B的样式更改为其他东西(即突出显示的边框),并且将是这样的:
---------- ========== | Button A | || Button B || ---------- ==========
我知道如何用XML创建样式(即创建样式),我想知道的是如何在运行时/使用java代码应用样式。
答案 0 :(得分:12)
让我们为你做一些代码...... :) 要动态地将样式应用于视图(在本例中为按钮),您必须在布局文件夹(res / layout)中执行以下操作。
我将其命名为 buttonstyle.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid android:color="#449def"/>
<stroke android:width="1dp" android:color="#2f6699"/>
<corners android:radius="3dp"/>
<padding android:left="10dp" android:top="10dp" android:right="10dp"
android:bottom="10dp"/>
</shape>
</item>
<item>
<shape>
<gradient android:startColor="#449def" android:endColor="#2f6699" android:angle="270"/>
<stroke android:width="1dp" android:color="#2f6699"/>
<corners android:radius="4dp"/>
<padding android:left="10dp" android:top="10dp" android:right="10dp"
android:bottom="10dp"/>
</shape>
</item>
</selector>
现在将样式应用于您的按钮,将以下代码添加到您活动的onCreate()方法中。
Button transferBtn = new Button(this);
transferBtn.setText("Test Example");
transferBtn.setId(R.string.transferBtn);
transferBtn.setBackgroundResource(R.layout.buttonstyle);
答案 1 :(得分:3)
您无法在运行时(从代码中)应用xml定义的样式。如果要在单击(按下)按钮时更改背景和字体样式,则应创建selector,以定义用于普通按钮或单击状态的背景。
如果选择器不是您想要的,您应该通过按钮的Button类的setXXX方法手动将每个按钮属性设置为所需的值。
P.S。您可以将旧按钮换成另一个从xml以不同样式充气的按钮。但这不是我认为的好方法......
答案 2 :(得分:0)
正如我在另一个帖子中回答的那样,您可以像某些人建议的那样以编程方式设置背景,或者如果您使用支持库,则可以以编程方式设置样式(我建议here)。 p>