For循环多个按钮和字符串:如果单击另一个按钮,如何更改按钮文本和背景并恢复为默认设置?
Posted
技术标签:
【中文标题】For循环多个按钮和字符串:如果单击另一个按钮,如何更改按钮文本和背景并恢复为默认设置?【英文标题】:For loops multiple buttons and strings : how to change button text and background and to restore to default settings, if another button is clicked? 【发布时间】:2021-07-21 19:25:00 【问题描述】:找到解决方案!查看更新!
我到处寻找解决方案,但找不到满意的答案。
我有 100 个带有默认布局和文本的按钮。我正在寻找的是一种简单、简单的方法/解决方案,当按下按钮 1 以更改其文本和背景以及按下按钮 2 以更改其自己的文本和背景但按钮 1 应返回其先前/默认设置和其他按钮也是如此。
我有办法做到这一点,但由于我还有 500 个其他按钮,所以我需要很长时间才能编写所有这些按钮,并且我也希望保持我的代码简短。
下面是我现在使用的代码,希望对大家有所帮助。谢谢!
btn1.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
String sometext = "<b>sometext</b>";
btn1.setText(html.fromHtml(sometext), Button.BufferType.SPANNABLE);
btn1.setTextColor(Color.YELLOW);
btn1.setBackgroundResource(R.drawable.grey);
btn2.setText(getString(R.string.todeaulttext));
btn2.setTextColor(Color.WHITE);
btn2.setBackgroundResource(R.drawable.purple);
btn3.setText(getString(R.string.todefaulttext));
btn3.setTextColor(Color.WHITE);
btn3.setBackgroundResource(R.drawable.purple);
btn2.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
String someothertext= "<b>someothertext</b>";
btn2.setText(Html.fromHtml(someothertext), Button.BufferType.SPANNABLE);
btn2.setTextColor(Color.YELLOW);
btn2.setBackgroundResource(R.drawable.grey);
btn1.setText(getString(R.string.todeaulttext));
btn1.setTextColor(Color.WHITE);
btn1.setBackgroundResource(R.drawable.purple);
btn3.getResources().getString(R.string.todeaulttext);
btn3.setTextColor(Color.WHITE);
btn3.setBackgroundResource(R.drawable.purple);
更新:找到了使用嵌套 for 循环测试我的问题的解决方案,它就像一个魅力。
first for loop = 将 onclickListeners 设置为所有按钮。
第二个循环 = 为所有按钮定义文本颜色和背景。
第三个循环 = 为每个按钮设置按钮文本(字符串)。
使用 if 语句 = 的第四个循环在单击按钮时更改文本颜色和背景。仅更改正在单击的按钮文本颜色和背景。
if 语句中的第五个循环 = 仅更改单击按钮的文本(字符串)。
我希望这对其他有类似问题的人有用
for (int i1 = 0; i1
buttons[i1] = findViewById(Array[i1]);
Button btn1 = findViewById(Array[i1]);
int finalI1 = i1;
int finalI = i1;
buttons[i1].setOnClickListener(v16 ->
for (int j = 0; j < Array.length; j++)
buttons[j] = findViewById(Array[j]);
Button btn = findViewById(Array[j]);
btn.setTextColor(Color.WHITE);
btn.setBackgroundResource(R.drawable.purple);
String[] stringArray = getResources().getStringArray(R.array.somestrings);
for (int k = 0; k < stringArray.length; k++)
buttons[k] = findViewById(Array[k]);
Button btn2 = findViewById(Array[k]);
btn2.setText(stringArray[k]);
int id = btn1.getId();
if (id == Array[finalI1])
for (int l = 0; l < Array.length; l++)
buttons[l] = findViewById(verbsArray[l]);
btn1.setTextColor(Color.YELLOW);
btn1.setBackgroundResource(R.drawable.grey);
if (id == Array[finalI])
String[] stringArray1 = getResources().getStringArray(R.array.someotherstring);
btn1.setText(stringArray1[finalI]);
);
【问题讨论】:
【参考方案1】:一种方法可能是 - 如果所有按钮都是动态创建的,则将它们全部保存在 List 中,以编程方式为每个按钮分配唯一的 Id(通过使用 setId/setTag)。在单击侦听器中,将单击的视图 ID 与按钮 ID 列表进行比较并执行所需的操作。
下面是一个工作示例代码供参考:
class MainActivity : AppCompatActivity() ,View.OnClickListener
private lateinit var linearLayout: LinearLayout
private val NUM_BUTTONS :Int = 10
private var buttonList = ArrayList<Button>()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
linearLayout = findViewById(R.id.linearLayout)
for( i in 1..NUM_BUTTONS)
val button = Button(this)
button.id= i
button.tag = i
button.text = "button " + i.toString()
button.setOnClickListener(this)
buttonList.add(button)
linearLayout.addView(button)
override fun onClick(view: View)
for( button in buttonList)
if(button.id == view.id)
button.text = "Clicked Me"
else
button.text = "Un Click All"
xml 布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".MainActivity"
android:orientation="vertical"
android:id="@+id/linearLayout">
</LinearLayout>
【讨论】:
thnx 我不知道如何实现这个,因为我不熟悉 kotlin。我确实找到了一个更简单的解决方案,而且您提供的 for 循环似乎比我发现的更短。 switch(v.getId()) case R.id.btn: if (btn!= null) String sometext= "text"; btn.setText(Html.fromHtml(sometext), Button.BufferType.SPANNABLE); btn.setTextColor(Color.YELLOW); btn.setBackgroundResource(R.drawable.grey); 休息;以上是关于For循环多个按钮和字符串:如果单击另一个按钮,如何更改按钮文本和背景并恢复为默认设置?的主要内容,如果未能解决你的问题,请参考以下文章