2017-02-23 41 views
0

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

这是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" 
      /> 

这意味着

setBackground(getResources().getDrawable(R.color.green)); 

将无法​​正常工作。

所以,我想是这样的:

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

PS:必须使用的TextView(无ImageView的)

我被困到它。你能帮我把我推进吗?

由于提前

共享截图:

enter image description here

+0

那么你现在面临的问题究竟是什么?这段代码的结果是什么? – skbrhmn

+0

@skbrhmn我的代码不会工作我需要什么。我的观点是在4个文字浏览中一次选择任何一个textview –

+0

我的意思是应用程序崩溃,或者它只是没有做你想做的事情?你的意思是说,当你触摸一个textView时,你只想'textView改变颜色,其他人要回到'choose_plan_bg'背景? – skbrhmn

回答

1

你只是在你的changeColour()方法更新textview1。如果你只是想突出显示“只有”一个textView,随时按下,那么你可以尝试如下所示。

首先,我提出了一个方法,它将textView作为参数,将其背景更改回choose_plan_bg。指定背景所在的位置。

private void changeColorBack(TextView textView) 
{ 
     textView.setBackground(getResources().getDrawable(R.drawable.choose_plan_bg)) 
} 

类似地,changeColour方法:

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和textViews设置为这个监听器:

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。

+0

感谢它的工作[+1] –

相关问题