以编程方式设置 Android 按钮样式
Posted
技术标签:
【中文标题】以编程方式设置 Android 按钮样式【英文标题】:Android Button Styling Programmatically 【发布时间】:2013-01-17 19:25:49 【问题描述】:如何以编程方式向 android 按钮添加/删除样式?是否可以在运行时应用样式?
我有两个类似这样的按钮
---------- ---------- |按钮 A | |按钮 B | ---------- ----------我想要做的是当一个按钮被点击时(比如说按钮 B),它运行一些代码,然后将按钮 B 的样式更改为其他东西(即突出显示的边框),并且会是这样的:
---------- ========== |按钮 A | ||按钮 B || ---------- ==========我知道如何在 XML 中进行样式设置(即创建样式),我只想知道如何在运行时/使用 java 代码中应用样式。
【问题讨论】:
您的意思是“以编程方式”吗? 任何你可以通过xml设置的东西都可以在运行时在Java代码中设置。通常有一个 setXXX 函数,其中 XXX 是您要更改的内容。查看 Button 类及其祖先以找到它。 XML 文件中的所有布局属性在 Java 中都有对应的 getter 和 setter 函数。您应该查看 Android SDK 文档以找到您想要的确切文档。如果您在查找这些内容时需要帮助,请发布您希望将按钮更改为的 XML 样式的 sn-p。 我现在正在尝试一些东西,我不确定它是否有效。 @Code-Guru 是的,我的意思是编程,我为此道歉 【参考方案1】:让我们为你的情况做一些代码......:) 要动态地将样式应用于您的视图(在这种情况下为按钮),您必须在布局文件夹(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: 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: 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);
【讨论】:
我发现有必要将 buttonstyle.xml 文件放在 res/drawable 目录中。 (注意我必须先创建目录)【参考方案2】:您不能在运行时应用 xml 定义的样式(来自代码)。如果您想在单击(按下)按钮时更改背景和字体样式,您应该创建selector,它定义了用于普通按钮或单击状态的背景。
如果选择器不是你想要的,你应该通过 Button 类的按钮 setXXX 方法手动将每个按钮属性设置为所需的值。
附:您可以将旧按钮换成另一个从 xml 膨胀的具有不同样式的新按钮。但我想这不是一个好方法......
【讨论】:
是的,我找到了一个选择器 XML 并修改了代码,我使用 setBackgroundResource(...) 来更新它。谢谢!【参考方案3】:正如我在另一个线程中回答的那样,您可以按照某些人的建议以编程方式设置背景,或者如果您使用支持库,您可以以编程方式设置样式(正如我建议的 here)。
【讨论】:
以上是关于以编程方式设置 Android 按钮样式的主要内容,如果未能解决你的问题,请参考以下文章