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

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

我想做的是

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

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

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

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

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

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

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

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

以下是布局中的 XML

<Button
    android:layout_width="150dp"
    android:layout_height="150dp"
    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 或类似这样。

标签: android button colors background background-color


【解决方案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 并基于布尔变量设置颜色。

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 2023-03-15
    • 2014-10-20
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多