2013-05-08 3 views
2

텍스트 값에 따라 TextView의 색상을 변경하는 방법을 알아 내려고하고 있습니다. TextView가 다른 부분에서 전송되었으므로 정상적으로 작동합니다. 내가 원했던 것은 TextView의 내용을 기반으로 텍스트의 색상을 변경하는 방법입니다. 따라서 이전 활동에서 TextView로 "11 Mbps"와 같은 값을 보내는 경우 해당 텍스트 색상을 노란색, "38 Mbps"녹색 및 1 Mbps 빨간색으로 변경하십시오. 그게 도움이된다면 나는 이클립스를 사용하고있다.텍스트 값을 기준으로 텍스트 색상을 변경하십시오.

다른 활동으로 TextView를 보내는 방법입니다. "showmsg"는 다른 페이지로 보낸 사용자 이름 일뿐입니다.

buttonBack.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v){ 
      final TextView username =(TextView)findViewById(R.id.showmsg); 
      String uname = username.getText().toString(); 

      final TextView wifistrength =(TextView)findViewById(R.id.Speed); 
      String data = wifistrength.getText().toString(); 



       startActivity(new Intent(CheckWiFiActivity.this,DashboardActivity.class).putExtra("wifi",(CharSequence)data).putExtra("usr",(CharSequence)uname)); 


     } 
    }); 

그리고 이것은 내가 다른 활동

Intent i = getIntent(); 
       if (i.getCharSequenceExtra("wifi") != null) { 
       final TextView setmsg2 = (TextView)findViewById(R.id.Speed); 
       setmsg2.setText(in.getCharSequenceExtra("wifi"));    
       } 

이 모두 잘 작동하지만이 방법의 가치를 기반으로 텍스트 뷰의 색상을 변경하는 단서가없는 그것을받는 방법입니다 본문. 어떤 도움이라도 대단히 감사 할 것입니다.

답변

4

분명히 이전 활동에서받은 String의 숫자에 따라 색상을 설정하고 싶습니다. 따라서 String에서 파싱해야하고 int에 저장 한 다음 숫자가 무엇인지에 따라 TextView의 색을 설정하십시오.

String s = in.getCharSequenceExtra("wifi"); 
// the next line parses the number out of the string 
int speed = Integer.parseInt(s.replaceAll("[\\D]", "")); 
setmsg2.setText(s); 
// set the thresholds to your liking 
if (speed <= 1) { 
    setmsg2.setTextColor(Color.RED); 
} else if (speed <= 11) { 
    setmsg2.setTextColor(Color.YELLOW); 
else { 
    setmsg2.setTextColor(Color.GREEN); 
} 

이 코드는 테스트되지 않은 코드이므로 약간의 실수가있을 수 있습니다.

구문 분석 방법은 here입니다.

+0

+1을 설정, 나는 그것을 하나를 시험하지 않았다하지만 그것이 작동 할 것 같습니다. 나는 당신의 것을 보았을 때 게시하기 시작한 것이 거의 아니었지만 가능할 때'switch'를 사용하고 (여기에'setText()'함수를 호출하는 것과 같이 한 줄만 쓰는 것을 좋아합니다.) 좋은 대답 – codeMagic

+0

정확히 내가 무엇을 찾고 있었는지. 방금 복사 한 코드를 붙여 넣었지만 프로그래밍에 대해 자세히 알아보고 그 코드를 확장하기 위해이 코드의 모든 부분을 분석 할 것입니다. 몇 달 동안이 작업을 수행했지만 필자는 유용한 프로그래머 덕분에 많이 만들고 있습니다. – SmulianJulian

1

먼저 모든 비 숫자 문자를 String에서 가져 와서 integer으로 변환하십시오. 새 값에 switch를 사용하고 색상 따라

String color = "blue"; // this could be null or any other value but I don't like initializing to null if I don't have to 
int speed = i.getCharSequenceExtra("wifi").replaceAll("[^0-9]", ""); // remove all non-digits here 
switch (speed) 
{ 
    case (11): 
     color = "yellow"; 
     break; 
    case (38): 
     color = "green"; 
     break; 
    case(1): 
     color = "red"; 
     break; 
} 
setmsg2.setTextColor(Color.parseColor(color); 

Here is a little site with some handy information

Color Docs

+0

이 답변은 매우 도움이되었지만 충분한 담당자가 없기 때문에 투표를 할 수 없습니다. 링크를 이용해 주셔서 감사합니다. – SmulianJulian

+0

@SmulianJulian 아무 문제가 없기 때문에 기꺼이 도와 드리겠습니다. – codeMagic

+0

글쎄, 여기서'switch' 문과 관련된 문제는 속도가 정확히 1, 11 또는 38 일 때만 처리된다는 것입니다. 다른 것이 있으면 텍스트가 파란색으로 유지되지만 값이 다른 것일 수는 없습니다. 그의 c ase, 누가 알 겠어. 그냥 내 코드와 같은 일을하지 않는다고 말하면됩니다. – zbr

관련 문제