Java 从4个文本视图中选择一个文本视图并同时更改其颜色

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

我有4个文本视图,在4个文本视图中,我必须从4个文本视图中选择任何人,同时我还必须更改文本视图的背景色(绿色)以突出显示它。 每个textview都使用自定义的可绘制背景

这是textview xml:

       <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);