5

您如何以编程方式向 android 按钮添加/删除样式?是否可以在运行时应用样式?

我有两个看起来像这样的按钮

     ---------- ----------
    | 按钮 A | | 按钮 B |
     ---------- ----------

我想要做的是当一个按钮被点击时(比如说按钮 B),它运行一些代码,然后将按钮 B 的样式更改为其他东西(即突出显示的边框),并且将是这样的:

     ---------- ==========
    | 按钮 A | || 按钮 B ||
     ---------- ==========

我知道如何在 XML 中进行样式设置(即创建样式),我只想知道如何在运行时/使用 java 代码中应用样式。

4

3 回答 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);
于 2013-01-17T19:54:17.800 回答
3

您不能在运行时应用 xml 定义的样式(来自代码)。如果您想在单击(按下)按钮时更改背景和字体样式,您应该创建选择器来定义用于普通按钮或单击状态的背景。

如果选择器不是您想要的,您应该通过 Button 类的按钮 setXXX 方法手动将每个按钮属性设置为所需的值。

PS您可以将旧按钮换成另一个从不同样式的xml膨胀的新按钮。但我想这不是一个好方法......

于 2013-01-17T19:45:32.577 回答
0

正如我在另一个线程中回答的那样,您可以按照某些人的建议以编程方式设置背景,或者如果您使用支持库,您可以以编程方式设置样式(如我在此处建议的那样)。

于 2016-09-16T10:00:50.683 回答