以编程方式设置Android按钮样式

5
如何在Android按钮中编程添加/删除样式? 是否可以在运行时应用样式?
我有两个按钮,看起来像这样:
---------- ---------- | 按钮A | | 按钮B | ---------- ----------
当一个按钮被点击时(假设是按钮B),它会运行一些代码,然后改变按钮B的样式为其他样式(例如突出的边框),并且将成为以下形式:
---------- ========== | 按钮A | || 按钮B || ---------- ==========
我知道如何在XML中创建样式,我只想知道如何在运行时/使用Java代码应用样式。

1
你的意思是“以编程方式”吗? - Code-Apprentice
任何可以通过XML设置的内容都可以在Java代码中运行时进行设置。通常有一个setXXX函数,其中XXX是您想要更改的内容。请查看Button类及其祖先以找到它。 - Gabe Sechan
在XML文件中的所有布局属性都有相应的Java getter和setter函数。您应该查看Android SDK文档以找到您想要的确切函数。如果您需要帮助找到这些函数,请发布一段XML样式代码片段,您希望将按钮更改为该样式。 - Code-Apprentice
我目前正在尝试一些东西,不确定它是否有效。@Code-Guru 是的,我是指编程方面的,对此我表示歉意。 - ibaguio
3个回答

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);

我发现将 buttonstyle.xml 文件放置到 res/drawable 目录中是必要的。(注意,我必须先创建该目录) - Sydwell

3
你无法在运行时(从代码中)应用xml定义的样式。如果你想在按钮被点击(按下)时更改背景和字体样式,你应该创建一个选择器来定义在普通状态下使用什么背景或者在点击状态下使用什么背景。
如果选择器不是你想要的,你可以通过Button类的setXXX方法手动设置每个按钮属性的值到所需值。
附:你可以用具有不同样式的从xml膨胀而来的另一个新按钮替换旧按钮。但我认为这不是一个好方法...

是的,我找到了一个选择器XML并修改了代码,我使用setBackgroundResource(...)来更新它。谢谢! - ibaguio

0

正如我在另一个帖子中回答的那样,你可以像一些人建议的那样通过编程方式设置背景,或者如果你正在使用支持库,你可以通过编程方式设置样式(就像我在这里建议的那样)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接