RelativeLayout.LayoutParams
을 사용하여 프로그래밍 방식으로 위치를 지정하고 크기를 조정할 때 지정된 가로 세로 비율로 제한해야하는 RelativeLayout
확장이 있습니다. RelativeLayout.LayoutParams
가 포함되어있는 경우 (200)의 width
100의 height
, 사용자 정의가 RelativeLayout
100 × 100가로 세로 비율을 제한하기 위해 RelativeLayout의 onMeasure()를 재정의합니다.
에 이미 익숙해 자체를 제한하는 것, 그래서 1 : 일반적으로, 나는 일에 자신을 제한하도록 할 것 유사한 목적을 달성하기 위해 통상의 커스텀 View
에서 onMeasure()
을 오버라이드 (override)한다. 예를 들어, SVG 이미지 변환기를 직접 작성했으며 SVG 이미지를 렌더링하는 사용자 정의 View
은 setMeasuredDimension()
에 대한 호출에 (a) 원래 측정 스펙 내에서 적합하고 (b) 일치하는 차원을 포함하도록 오버라이드 된 onMeasure()
을가집니다. 원래 SVG 이미지의 종횡비.
마찬가지로 사용자 정의 RelativeLayout
으로 돌아가겠습니다. 비슷한 방법으로 제한하고 싶습니다. onMeasure()
을 무시했지만 많은 성공을 거두지 못했습니다. RelativeLayout
의 onMeasure()
이 모든 자식 View
게재 위치를 수행한다는 것을 알기 때문에 현재 일반적으로 시도하고 있지만 원하는 결과가없는 경우 onMeasure()
을 우선 적용하여 처음에 치수 사양을 수정합니다 (예 : 원하는대로 적용). 제약 조건)을 입력 한 다음 super.onMeasure()
으로 전화하십시오. 이처럼 :
@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec){
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
// Restrict the aspect ratio to 1:1, fitting within original specified dimensions
int chosenDimension = Math.min(chosenWidth, chosenHeight);
widthMeasureSpec = MeasureSpec.makeMeasureSpec(chosenDimension, MeasureSpec.AT_MOST);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(chosenDimension, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
내가이 변태, 높이가 제대로 내가 의도 한대로 제한되지만 폭이 아닌되어 있다는 것입니다 수행 할 때 실제로가 발생합니다. 설명하기 :
100의 높이와 폭을 갖는 (100) 내에서 정의
RelativeLayout
RelativeLayout.LayoutParams
결과에서 (200)의 높이 (100)의 폭을 지정 - 올바른>입니다.RelativeLayout.LayoutParams
에서 높이와 높이를 200으로 지정하면 높이가 100이고 너비가 200 인 사용자 정의RelativeLayout
이됩니다. -> 올바르지 않습니다.
은 내가 대신 처음에 RelativeLayout
을 배치 (그리고 그 동안 내가 잘 해결하기 위해 그렇게 할 수 있음) 호출 클래스 내에서 내 화면 비율 제한 논리를 적용하지만, 정말이 수 실현 RelativeLayout
자체가 수행하고자하는 구현 세부 사항입니다.
설명 : 결과 값은 getWidth()
과 getHeight()
입니다. 이 값은 레이아웃 프로세스가 다시 수행 된 후에 나중에 다시 읽혀집니다.
감사합니다.이것은 대단히 나를 도왔다. –