마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

뷰 여러개의 배경색상 변경 관련

0 추천

안녕하세요

 

뷰 여러개 색상변경 하는데 좀더 효과적인 방법이 없을까 하고 아이디어 조언 구하려합니다.

     
     
     
     
     
     
     

위 표처럼 뷰들을 배치를 하고 TCP로 데이터를 받아서 데이터가 0이면 빨간색, 1이면 녹색을 하려고

하는데요. 배치하는거야 뭐.. 여러 방법이 있겠죠. 리니어레이아웃안에 뷰 넣고 배치해도되고

렐러티브 레이아웃으로 배치하는방법도 있고..

 

근데 표현해야할 가짓수가 한 30개이상된다 치면.. 그걸 일일히 뷰로 id주고.. 소스상에서

findViewById 다 해주고 데이터 받아서 일일히 .setbackgroundcolor(Color.red) 해주고..

하려다보니 너무 비효율적인거 같더라구요. 혹시 괜찮은 아이디어 없을까요?

아시리 (8,400 포인트) 님이 2015년 12월 18일 질문

2개의 답변

0 추천

뷰를 동적으로 추가하던 xml 에서 가져오던 순서대로 가져와서 ArrayList<View> mList

형태로 순서대로 저장해보세요. 저장한 후에 TCP 로 받아온 데이터도 순서대로 가져올꺼잖아요?

그러면 ArrayList<View> mList 의 인덱스와 TCP 의 인덱스가 동일할테니

for(int cnt = 0; cnt < mList.length() ; cnt++) {

    mList.get(cnt).setBackground(TCP데이터에 대한 컬러값);

}

해주면 간단하게 되지 않을까요?

 

두번째 방법으로는 resource01 과 같은 형식으로 스트링 + 식별가능한 integer 값으로 xml 에 아이디를 부여하고

int viewId = getResources().getIdentifier(name, type, package); 와 같이 스트링을 통해서 실제 리소스 아이디(R 에 정의된 integer 값)를 가져와서 한방에 처리하는 방법도 있습니다.

리소스가 굉장히 많은 경우 이방법이 유용하겠죠 아래 링크 참고하세요

http://ldelight.tistory.com/entry/Android-%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C-Resource-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0

라쎄린드 (25,460 포인트) 님이 2015년 12월 18일 답변
라쎄린드님이 2015년 12월 18일 수정
각각 뷰에대해서 findViewById는 어쨌든 해줘야되는거죠?
xml 로 구성하지 않고 뷰를 onCreate 상에서 동적으로 해준다면 Find 하지 않아도 되지만 코드는 훠얼씬 더 길어지겠죠..?
0 추천

그냥...root View 로 루프돌리는게 나을듯...

필요시에는 재귀로..

대충 아래처럼?!

 

public void setXX(ViewGroup root, int condition) {
    for (int i = 0; i < root.getChildCount(); i++) {
        View child = root.getChildAt(i);

        if (child instanceof yourView ) {
            if( condition == 0 ) {
                  ((yourView)child).setBackgroundColor(Color.RED);
	        }else{
                  ((yourView)child).setBackgroundColor(Color.BLUE);
	        }

        } else if (child instanceof ViewGroup) {
            setXX((ViewGroup) child, condition);

        }
    }
}

 

익명사용자 님이 2015년 12월 18일 답변
2015년 12월 18일 수정
...