Java 从4个文本视图中选择一个文本视图并同时更改其颜色
我有4个文本视图,在4个文本视图中,我必须从4个文本视图中选择任何人,同时我还必须更改文本视图的背景色(绿色)以突出显示它。 每个textview都使用自定义的可绘制背景 这是textview xml:Java 从4个文本视图中选择一个文本视图并同时更改其颜色,java,android,Java,Android,我有4个文本视图,在4个文本视图中,我必须从4个文本视图中选择任何人,同时我还必须更改文本视图的背景色(绿色)以突出显示它。 每个textview都使用自定义的可绘制背景 这是textview xml: <TextView android:id="@+id/textview1" android:layout_width="match_parent" android:layout_height="@dime
<TextView
android:id="@+id/textview1"
android:layout_width="match_parent"
android:layout_height="@dimen/_55sdp"
style="@style/ChoosePlan"
android:background="@drawable/choose_plan_bg"
android:text="@string/part_time_monthly"
/>
这是行不通的
所以我试着这样:
private void changeColor()
{
Drawable tempDrawable = getResources().getDrawable(R.drawable.choose_plan_bg);
LayerDrawable bubble = (LayerDrawable) tempDrawable; //(cast to root element in xml)
GradientDrawable solidColor = (GradientDrawable) bubble.findDrawableByLayerId(R.id.outerRectangle);
solidColor.setColor(getResources().getColor(R.color.green));
textview1.setBackground(tempDrawable);
textview1.setTextColor(getResources().getColor(R.color.white));
}
onClick事件调用上述方法:
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.tv_partTimeMonthly:
changeColor();
checkDoneBtnVisibile();
break;
case R.id.tv_partTimeAnnually:
checkDoneBtnVisibile();
break;
case R.id.tv_fullTimeMonthly:
checkDoneBtnVisibile();
break;
case R.id.tv_fullTimeAnually:
checkDoneBtnVisibile();
break;
case R.id.iv_back_button:
finish();
break;
}
}
注意:必须使用文本视图(无图像视图)
我被它粘住了。你能帮我走一走吗
提前谢谢
分享截图:
您仅在
changeColour()
方法中更新textview1
。如果您只想突出显示在任何时候按下的“仅”一个文本视图,那么您可以尝试以下操作
首先,我创建了一个方法,该方法将textView作为参数,将其背景更改回choose\u plan\u bg
。指定背景在drawable中的位置
private void changeColorBack(TextView textView)
{
textView.setBackground(getResources().getDrawable(R.drawable.choose_plan_bg))
}
同样,ChangeColor方法:
private void changeColor(TextView textView)
{
Drawable tempDrawable = getResources().getDrawable(R.drawable.choose_plan_bg);
LayerDrawable bubble = (LayerDrawable) tempDrawable; //(cast to root element in xml)
GradientDrawable solidColor = (GradientDrawable) bubble.findDrawableByLayerId(R.id.outerRectangle);
solidColor.setColor(getResources().getColor(R.color.green));
textView.setBackground(tempDrawable);
textView.setTextColor(getResources().getColor(R.color.white));
}
接下来,创建一个独特的OnClickListener
,并将文本视图设置为此侦听器:
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
changeColorBack(textView1);
changeColorBack(textView2);
changeColorBack(textView3);
changeColorBack(textView4);
switch (v.getId()) {
case R.id.textView1:
changeColor(textView1);
break;
case R.id.textView2:
changeColor(textView2);
break;
case R.id.textView3:
changeColor(textView3);
break;
case R.id.textView4:
changeColor(textView4);
}
}
};
textView1.setOnClickListener(listener);
textView2.setOnClickListener(listener);
textView3.setOnClickListener(listener);
textView4.setOnClickListener(listener);
这将仅选择按下的textView,而取消选择任何其他textView。那么您现在面临的问题到底是什么?这个代码的结果是什么?@skbrhmn我的代码无法满足我的需要。我的观点是,在4个文本视图中选择一个文本视图。我的意思是,应用程序正在崩溃,还是只是没有做你想做的?你的意思是说,当你触摸一个文本视图时,你希望“仅”该文本视图改变颜色,而其他文本视图恢复到
choose\u plan\u bg
背景?什么是outerRectangle
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
changeColorBack(textView1);
changeColorBack(textView2);
changeColorBack(textView3);
changeColorBack(textView4);
switch (v.getId()) {
case R.id.textView1:
changeColor(textView1);
break;
case R.id.textView2:
changeColor(textView2);
break;
case R.id.textView3:
changeColor(textView3);
break;
case R.id.textView4:
changeColor(textView4);
}
}
};
textView1.setOnClickListener(listener);
textView2.setOnClickListener(listener);
textView3.setOnClickListener(listener);
textView4.setOnClickListener(listener);