프로그래밍 방식으로 Android에서 사용자 정의보기의 높이와 너비 설정


128

이라는 이름의 사용자 지정보기를 만들었습니다 Graphview. 다음은 GraphView 클래스의 구조입니다.

public class GraphView extends View {

    public GraphView(Context context, float[] values, String title, String[] horlabels, String[] verlabels, boolean type) {
        super(context);
                ........
   }

   ..................
   .................
}

을 사용하여 표를 뷰에 추가했습니다 addview(). 잘 작동합니다. 이제의 높이와 너비를 설정하고 싶습니다 GraphView. 그렇게하는 방법?

답변:


140

쉬운 방법은 다음과 같이 프로그래밍 방식으로 크기를 설정하는 것입니다.

graphView.setLayoutParams(new LayoutParams(width, height));

뷰의 정확한 크기를 알고 있으면 좋습니다. 좀 더 유연한 접근 방식을하려는 경우, 당신은 대체 할 수 있습니다 onMeasure()공간을 사용할 수 및 레이아웃 제약 (에 따라 더 정확하게보기를 측정하는 방법 wrap_content, match_parent또는 고정 된 크기).

SDK 디렉토리에서 Android 문서 와 샘플 onMeasure()을 보면 재정의 방법에 대한 예제를 찾을 수 있습니다 .LabelView


16
가져 오는 LayoutParams를 아는 것이 도움이 될 것입니다.
user3690202

1
LayoutParams이 레이아웃에서해야 graphView배치됩니다. 예를 들어, XML 레이아웃 파일 graphView에 내부 RelativeLayout에 배치 된 경우new RelativeLayout.LayoutParams(width, height)
Vic

208

다음과 같이 높이와 너비를 설정할 수 있습니다.

myGraphView.setLayoutParams(new LayoutParams(width, height));

76
사용하는 LayoutParam 클래스가 올바른 상위 Layout 클래스에 있는지 확인해야합니다. 예를 들어 GraphView가 LinearLayout에 포함 된 경우 LinearLayout.LayoutParams 클래스를 사용해야합니다.
yincrash

41
이것은 또한 작동하며 올바른 LayoutParams 클래스를 사용합니다. 간단히 수행하십시오 myGraphView.getLayoutParams().height = 100;.
sulai

21
당신이하는 경우 this.getLayoutParams().height = 100에 따라야합니다 this.setLayoutParams(this.getLayoutParams()). 그렇지 않으면 아무것도하지 않습니다 (유용한).
Achal Dave

4
이 답변이 더 많은 점수를 얻는 것이 이상하다고 생각합니다. 더 쉬운 반면 모듈화는 훨씬 덜합니다. 다른 곳에서 뷰를 사용하려면 너비 / 높이 값도 하드 코딩해야합니다. 이것을 사용할 때주의하십시오.
gardarh 2016 년

1
지적 해 주셔서 감사합니다 @ yincrash. 내 사용자 정의보기의 부모 클래스 (내 경우에는 SurfaceView) 대신 부모보기 '클래스 (내 경우 RelativeLayout)를 사용해야하는 것이 이상하게 보입니다.
ericn

75

이와 같이 상대 레이아웃에서 뷰의 높이와 너비를 설정할 수 있습니다

ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = 130;
view.setLayoutParams(params);

2
layoutparam을 다시 설정할 필요가 없습니다. 자동으로 반영됩니다. 이것은 객체 지향 접근 방식의 장점입니다.
Dipendra

8
@Dipendra는 호출하는 setLayoutParams()이 같은 다른 방법을 호출하기 때문에 필요 resolveLayoutParams()requestLayout()
윌리엄

()과 같은에서 onCreate getLayoutParams에 예외를주는 것은 널 value.So params.height 원인 예외
Sibasish

높이를 설정해야하는보기를 참조해야합니다. 같은 견해를 가리키고 있는지 확인하십시오
Rakshi

1
layoutParams뷰의 시작을 얻는 것은 NPE가 될 것입니다. 이것을 실행하는 시점을 설명하십시오.
John Sardinha '

6

Kotlin에서는 가상 속성을 사용하여 모든보기의 너비와 높이를 직접 설정할 수 있습니다.

someView.layoutParams.width = 100
someView.layoutParams.height = 200

4
spin12.setLayoutParams(new LinearLayout.LayoutParams(200, 120));

spin12당신의 회이며 200 , 120 입니다 widthheight당신을 위해 spinner.


3

이것은 부모 뷰가의 인스턴스라고 가정하고 Kotlin 기반 버전입니다 LinearLayout.

someView.layoutParams = LinearLayout.LayoutParams(100, 200)

이를 통해 너비와 높이 ( 100200)를 한 줄로 설정할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.