通过单击按钮交替更改圆形按钮背景和文本
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循环多个按钮和字符串:如果单击另一个按钮,如何更改按钮文本和背景并恢复为默认设置?