通过单击按钮交替更改圆形按钮背景和文本

Posted

技术标签:

【中文标题】通过单击按钮交替更改圆形按钮背景和文本【英文标题】:Change Circular Button Background and Text alternatively with button clicks 【发布时间】:2015-02-25 18:36:30 【问题描述】:

我是 android 开发的新手,我一直被这个问题困扰。

我想做的是

    我正在尝试创建一个带有绿色背景和红色文本的圆形按钮。

    然后我尝试将圆形按钮背景更改为红色,并将其上的文本更改为绿色。

    最后,这两个都应该通过按钮单击重复。即,当我第一次单击按钮时,“带有红色文本的绿色按钮”应该变成“带有绿色文本的红色按钮”,然后当我第二次单击按钮时,“带有绿色文本的红色按钮”应该变回“绿色”带有红色文本的按钮'等等。

我成功创建了一个圆形按钮并更改了按钮背景,上面的文字。但是,有一个并发症。

单击按钮时,圆形按钮背景变为正方形,整个正方形被红色填充。我不想那样。

我希望颜色以圆形方式填充。

以下是drawable文件夹中的XML文件

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#00FF00" />

以下是布局中的 XML

<Button
    android:layout_
    android:layout_
    android:text="Activate"
    android:textAllCaps="false"
    android:textSize="40sp"
    android:textColor="#FF0000"
    android:id="@+id/buttonActivate"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:background="@drawable/round_button"
    android:onClick="onButtonClick"
    style="?android:attr/borderlessButtonStyle" />

以下来自 MainActivity

public void onButtonClick(View v) 

    // Change the background color & text color of the button when clicked
    Button buttonActivate = (Button) findViewById(R.id.buttonActivate);
    buttonActivate.setBackgroundColor(Color.parseColor("#FF0000"));
    buttonActivate.setText("De-Activate");
    buttonActivate.setTextColor(Color.parseColor("#00FF00"));

由于我是新手,请详细说明如何执行此操作。

【问题讨论】:

当你设置背景颜色时,意味着你覆盖了背景。您可以创建另一个具有红色背景的drawable,而不是 setBackgroundColor 调用 setDrawable 或类似这样。 【参考方案1】:

为你的drawable试试这个:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true">
        <shape android:shape="oval">
            <solid android:color="#00ff00" />
        </shape>
    </item>

    <item>
        <shape android:shape="oval">
            <solid android:color="#ff0000" />
        </shape>
    </item>

</selector>

您的点击...

public void onButtonClick(View v) 
    if (buttonActivate.isSelected()) 
        buttonActivate.setTextColor(Color.parseColor("#00ff00"));
        buttonActivate.setSelected(false);
     else 
        buttonActivate.setTextColor(Color.parseColor("#ff0000"));
        buttonActivate.setSelected(true);
    

【讨论】:

你给我的 onButtonclick 方法创建了我想要的循环。感谢那。但是,当我打开应用程序时,活动开始使用红色按钮,我希望它是绿色的。你能调查一下吗? 您可以简单地交换 xml drawable 中的两个颜色值,同样在 onButtonClick 方法上。 这就是我在此期间所做的。有效。非常感谢你的帮助。顺便提前祝你新年快乐【参考方案2】:

维护布尔变量,即默认情况下将布尔变量设置为 false,并且每当执行点击设置为 true 并基于布尔变量设置颜色。

【讨论】:

以上是关于通过单击按钮交替更改圆形按钮背景和文本的主要内容,如果未能解决你的问题,请参考以下文章

For循环多个按钮和字符串:如果单击另一个按钮,如何更改按钮文本和背景并恢复为默认设置?

如何通过单击按钮更改文本颜色?

如何通过单击按钮更改标签文本?

不改变按钮的文本颜色

iPhone 的啥代码,以便用户可以通过单击某些按钮来更改文本视图中的字体大小?

如何通过动态单击按钮来更改选项卡标题名称?