XML로 정의 된 기존 규칙을 프로그래밍 방식으로 제거하려면 어떻게합니까?
상대 레이아웃 안에 포함 된 선형 레이아웃이 있습니다. XML 파일에서 다른 선형 레이아웃의 오른쪽에 설정되어 있습니다 (잘 작동 함). 어떤 경우에는 활동의 onCreate 중에 레이아웃의 상대적 위치를 변경하고 싶으므로 다른 레이아웃과 관련되도록 "to the right of"매개 변수를 수정해야합니다. 나는 이것을 시도했다 :
RelativeLayout.LayoutParams layoutParams;
layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove
.getLayoutParams();
layoutParams.addRule(RelativeLayout.RIGHT_OF,
R.id.new_ref_LinearLayout);
하지만 작동하지 않습니다 : o (
단서가 있습니까?
모든 규칙은 항상 고정 크기의 Java 배열에 저장되므로 규칙을 제거 할 수 없습니다. 그러나 규칙을로 설정할 수 있습니다 0
. 예를 들면
layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);
layoutParams.addRule(RelativeLayout.BELOW, R.id.new_ref_LinearLayout);
편집 ( Roger Rapid 에게 감사 ) :
API 레벨 17부터 클래스 RelativeLayout.LayoutParams
에는 다음 메소드가 있습니다.
public void removeRule(int verb)
따라서 다음 코드 줄을 사용하여 규칙을 제거 할 수 있습니다.
layoutParams.removeRule(RelativeLayout.RIGHT_OF);
그리고 다음과 같이 제로 규칙을 '추가'할 때와 똑같은 결과를 얻을 수 있습니다.
layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);
전화가 필요하다고 생각합니다.
relativeLayout.updateViewLayout(linearLayoutToMove, layoutParams);
LayoutParams를 변경 한 후.
편집에 대한 응답으로 다음을 사용하여 새 LayoutParameters를 만들 수 있습니다.
LinearLayout.LayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
그런 다음 새 규칙을 추가하십시오. 그런 다음 앞서 언급 한 updateViewLayout () 메서드를 사용하여 레이아웃 매개 변수를 업데이트합니다.
기존 코드에 다음 코드를 추가하십시오.
linearLayoutToMove.setLayoutParams(layoutParams)
나는 이것이 일을해야한다고 생각한다. 위의 라인이 작동하지 않는 경우, 위의 라인 linearLayoutToMove.invalidate()
이후 에 전화를 시도 하십시오.
'Program Tip' 카테고리의 다른 글
루비 문자열을 날짜로 변환 (0) | 2020.11.07 |
---|---|
numpy 배열에 항목을 추가하는 방법 (0) | 2020.11.07 |
setInterval 타이머를 어떻게 재설정합니까? (0) | 2020.11.07 |
스칼라로 반환 (0) | 2020.11.07 |
node-inspector로 node.js 디버깅 (0) | 2020.11.07 |