2011-09-23 2 views
3

프로그래밍 방식으로이 작업을 수행해야합니다. 그래서 나와 함께 감내하십시오.왜 뷰에 넣은 각 요소에 대해 RelativeLayout.LayoutParams의 새로운 세트를 만들어야합니까?

나는 서로 아래에 정렬하도록 설정된 텍스트와 두 개의 버튼이 있습니다. 그래서 각각에 대해 새로운 RelativeLayout.LayoutParams 인스턴스를 만들고 서로 아래에 설정하는 규칙을 추가했습니다. 그게 효과적이고 나는 그걸로 행복해.

내 질문은 : 왜 이런 식으로 레이아웃을 표시하기 위해 새 인스턴스를 만들어야합니까? 다음 코드를 줄일 수있는 방법이 너무 반복적 인 (내 자신의 개인 메서드를 작성하는 것 말고는 그것을 말릴 수 있습니다.) 나는 뭔가를 활용하여 적은 코드 줄에서 같은 일을 수행 할 수있는 방법이 있는지 궁금하네요. Android SDK에서 간과 할 수 있음)? 각 요소에 대해 새로운 RelativeLayout.LayoutParams 인스턴스를 계속 만들어야합니까?

layout = new RelativeLayout(this); 
layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

text = new TextView(this); 
text.setId(1); 
text.setText("This is text"); 
layout.addView(text); 

myButton1 = new Button(this); 
myButton1.setId(2) 
myButton1.setOnClickListener(this); 
RelativeLayout.LayoutParams buttonParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
buttonParams.addRule(RelativeLayout.BELOW, text.getId()); 
layout.addView(myButton1, buttonParams); 

myButton2 = new Button(this); 
myButton2.setId(3) 
myButton2.setOnClickListener(this); 
buttonParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
buttonParams.addRule(RelativeLayout.BELOW, myButton1.getId()); 
layout.addView(myButton2, buttonParams); 

답변

1

불행하게도,이 (적어도 API에 따라) RelativeLayout.LayoutParams에 대한 removeRule() 방법은 없습니다 그래서 당신은 새로운 LayoutParams 객체를 매번 생성해야합니다.

나는 프로그래밍 방식으로 레이아웃을 설정하는 것보다 xml 레이아웃을 선호해야한다는 @jeffamaphone에 동의하는 경향이 있습니다. xml에 전체 레이아웃을 넣지 않아도 리소스 ID (자세한 내용은 doc 참조)를 사용하여 항목의 ID를 설정해야합니다. 고유 ID를 보장합니다.

+1

감사를 사용하여 false로 추가 된 어떤 규칙을 설정할 수 있습니다. 나는 단지 내가 아무 이유없이 먼 길을 가고 있지 않다는 것을 확실히하고 싶었다. 불행히도, 나는 프로그래밍 방식 (XML 없음)으로되어있다. (나는 규칙을 만들지 않는다.) – user5243421

0

당신은 당신이, 노엘 0

buttonParams.addRule(RelativeLayout.BELOW, 0); 
관련 문제