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

코드상으로 만든 버튼 컨트롤 질문드립니다.

0 추천
package com.example.testapp;

import android.app.Activity;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends Activity implements OnClickListener{

 public static final int BEST = 1;
 public static final int NEW = 2;
 public static final int ROCKET=3;
 Button titlebtn;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  String[] arr = {"가" , "나" , "다"};
  
  LinearLayout headerlinear = new LinearLayout(getBaseContext());
  LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
  headerlinear.setLayoutParams(param);
  headerlinear.setBackgroundColor(Color.WHITE);
  headerlinear.setOrientation(LinearLayout.HORIZONTAL);
  for(int i = 0; i < arr.length; i++) {
   titlebtn = new Button(getBaseContext());
   LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
   p.weight = 1;
   titlebtn.setLayoutParams(p);
   titlebtn.setBackgroundColor(Color.GREEN);
   titlebtn.setText(arr[i]);
   titlebtn.setTag(String.valueOf(i));
//   titlebtn.setWidth();
   titlebtn.setTextColor(Color.WHITE);
   titlebtn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
     int index = Integer.parseInt(String.valueOf(v.getTag()));
     System.out.println(index);
     switch (index) {
     case BEST:
      titlebtn.setBackgroundColor(Color.GREEN);
      titlebtn.setText(Color.WHITE);
      break;
     case NEW:
      titlebtn.setBackgroundColor(Color.GREEN);
      titlebtn.setText(Color.WHITE);
      break;
     case ROCKET:
      titlebtn.setBackgroundColor(Color.GREEN);
      titlebtn.setText(Color.WHITE);
      break;
     default:
      break;
     }
    }
   });
   setTab();
   headerlinear.addView(titlebtn);
  }
  LinearLayout mainlinear = (LinearLayout) findViewById(R.id.mainlinear);
  mainlinear.addView(headerlinear);
 }

 public void setTab() {
  
 }
 
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  // Handle action bar item clicks here. The action bar will
  // automatically handle clicks on the Home/Up button, so long
  // as you specify a parent activity in AndroidManifest.xml.
  int id = item.getItemId();
  if (id == R.id.action_settings) {
   return true;
  }
  return super.onOptionsItemSelected(item);
 }

 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  
 }
}

각각의 버튼에 대한 컨트롤이 부족하여 질문드립니다.

method를 호출해서 3개의 버튼에 대한 배경색을 바꾸고 싶은데, 어떻게 바꾸어야 하는지 잘모르겠습니다.

pleasemehelp (150 포인트) 님이 2015년 7월 7일 질문

1개의 답변

0 추천

음 한참 쓰다보니 조금 문제가 있을것 같은 부분이 보이긴하내요

 public void onClick(View v) 내부에

titlebtn 을 사용하셨는데 이값은 계속 변한 값이라 마지막버튼만을 가리키고 있을 듯 하내요.

제생각엔 titlebtn --> v로 바꾸시는 것이 어떨지 합니다.

 

이건 제 개인적인 취합입니다.

저는 이럴때

Button a,b,c 이렇게 3가지 버튼을 다 따로 정의해서 사용합니다.

그리고 onClick함수는

메인 클래스인 MainActivity 에 정의하고

각 버튼의 setOnClickListener은 this로 넘겨줍니다. 그러면 버튼의 클릭이벤트 처리를 MainAcitivity에 넘기게 되며 메인이 onClick을 처리하게 되죠. 그리고 onClick함수는 파라미터로 view를 넘기니 이 view가 이벤트를 발생시킨 뷰니 그 view의 아이디 값이나 기타 값으로 각 view들을 구분합니다.

아래는 저도 그냥 대충 정리해본 것인데요 확인 저도 못해봤습니다.

Button titlebtn[arr.length];
for(int i = 0; i < arr.length; i++) {   
 titlebtn[i] = new Button(getBaseContext());   
 LinearLayout.LayoutParams p = new LinearLayout.LayoutParams (LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
    p.weight = 1;
 titlebtn[i].setLayoutParams(p);
 titlebtn[i].setBackgroundColor(Color.GREEN);
    titlebtn[i].setText(arr[i]);
    titlebtn[i].setTag(String.valueOf(i));
    titlebtn[i].setTextColor(Color.WHITE);
    titlebtn[i].setOnClickListener(this);
    setTab();   
 headerlinear.addView(titlebtn);
}
 
 
@Override   
public void onClick(View v) {
 int index = Integer.parseInt(String.valueOf(v.getTag()));
 System.out.println(index);
 // 눌러진 뷰의 색상을 변경하고 싶을때
 
 switch (index) {
  case BEST:
   v.setBackgroundColor(Color.GREEN);
   v.setText(Color.WHITE);
   break;
  case NEW:
   v.setBackgroundColor(Color.GREEN);
   v.setText(Color.WHITE);
   break;
  case ROCKET:
   v.setBackgroundColor(Color.GREEN);      
   v.setText(Color.WHITE);      
   break;     
  default:      
   break;     
 }    
}

 

 

컴러기 (22,230 포인트) 님이 2015년 7월 7일 답변
...