2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

HorizontalScrollView의 크기를 동적으로 변경하는 방법은?

_____
Q1: HorizontalScrollView의 크기를 동적으로 변경하려면 어떻게 해야 하나요?
A1: HorizontalScrollView의 크기는 일반적으로 LayoutParams를 통해 변경할 수 있습니다. 예를 들어, 자바 코드에서 `getLayoutParams()`를 호출하여 현재 레이아웃 파라미터를 가져오고, 너비(`width`)나 높이(`height`) 값을 변경한 뒤 `setLayoutParams()`를 호출하여 적용합니다.

```java
HorizontalScrollView hsv = findViewById(R.id.horizontalScrollView);
ViewGroup.LayoutParams params = hsv.getLayoutParams();
params.width = 500; // 원하는 너비(px)
params.height = 300; // 원하는 높이(px)
hsv.setLayoutParams(params);
```

---

Q2: 크기 변경 후 화면에 바로 반영되나요?
A2: 네, `setLayoutParams()`를 호출하면 레이아웃이 다시 측정되고 배치되어 변경 사항이 화면에 즉시 반영됩니다.

---

Q3: 동적으로 크기를 변경할 때 px 단위가 아닌 dp 단위를 사용하려면 어떻게 하나요?
A3: dp 단위를 px로 변환해야 합니다. 아래 코드를 참고하세요.

```java
int dpValue = 200; // 원하는 크기(dp)
float scale = getResources().getDisplayMetrics().density;
int pxValue = (int) (dpValue * scale + 0.5f);
params.width = pxValue;
params.height = pxValue;
hsv.setLayoutParams(params);
```

---

Q4: HorizontalScrollView 내부 컨텐츠에 따라 크기를 자동으로 조정할 수 있나요?
A4: HorizontalScrollView는 기본적으로 크기가 고정되어 있으며 내부 컨텐츠의 크기에 따라 직접 크기가 변하지 않습니다. 내부 콘텐츠의 크기에 맞춰 HorizontalScrollView 크기를 조정하려면, 내부 뷰의 측정된 크기를 얻어서 LayoutParams에 반영하는 코드를 작성해야 합니다.

예:

```java
View child = hsv.getChildAt(0);
int childWidth = child.getMeasuredWidth();
ViewGroup.LayoutParams params = hsv.getLayoutParams();
params.width = childWidth; // 내부 뷰 너비에 맞춤
hsv.setLayoutParams(params);
```

단, `getMeasuredWidth()`를 올바르게 얻으려면 뷰가 이미 레이아웃 된 이후에 호출해야 합니다.

---

Q5: 크기 변경 시 애니메이션 효과를 주려면 어떻게 해야 하나요?
A5: `ValueAnimator` 또는 `ObjectAnimator` 등을 사용하여 LayoutParams의 너비 또는 높이 값을 애니메이션으로 변경할 수 있습니다.

예:

```java
ValueAnimator animator = ValueAnimator.ofInt(hsv.getWidth(), targetWidth);
animator.addUpdateListener(valueAnimator -> {
int val = (int) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams lp = hsv.getLayoutParams();
lp.width = val;
hsv.setLayoutParams(lp);
});
animator.setDuration(300);
animator.start();
```

---

Q6: XML 레이아웃에서 크기를 동적으로 제어할 수 있나요?
A6: XML에서는 고정 값 혹은 wrap_content, match_parent 등의 속성만 지정할 수 있으며, 동적인 크기 변경은 불가능합니다. 반드시 자바/Kotlin 코드에서 LayoutParams를 수정하여야 합니다.

---

요약:
- `HorizontalScrollView.getLayoutParams()`로 현재 레이아웃 파라미터를 가져옴
- 파라미터 안의 width, height 값을 원하는 크기로 변경
- `setLayoutParams()`를 호출하여 적용
- 단위 변환(dp → px), 내부 뷰 크기 참조, 애니메이션 적용 등 필요 시 추가 처리 가능
- XML에서 동적 크기변경은 불가, 반드시 코드에서 수행해야 함
`HorizontalScrollView`의 크기를 동적으로 변경하는 방법은 Android에서 여러 가지 방법으로 구현할 수 있습니다.

다음은 이를 구현하기 위한 단계별 방법입니다.

1. `HorizontalScrollView` 레이아웃 XML 정의 먼저, `HorizontalScrollView`를 XML 레이아웃 파일에 정의합니다.

이 예제에서는 기본적인 레이아웃을 가정하고 시작합니다.

```xml height="wrap_content"> ```

2. 동적으로 뷰 추가 및 크기 변경 `Activity` 또는 `Fragment`에서 `HorizontalScrollView`의 크기를 동적으로 변경하는 방법은 아래와 같습니다.

예를 들어, 사용자가 버튼을 클릭하면 새로운 뷰를 추가하고 `HorizontalScrollView`의 크기를 조정하도록 만들어보겠습니다.

```java public class MainActivity extends AppCompatActivity { private HorizontalScrollView horizontalScrollView; private LinearLayout linearLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); horizontalScrollView = findViewById(R.id.horizontalScrollView); linearLayout = findViewById(R.id.linearLayout); Button addButton = findViewById(R.id.addButton); addButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 동적으로 뷰 추가 TextView textView = new TextView(MainActivity.this); textView.setText("New Item"); textView.setLayoutParams(new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); linearLayout.addView(textView); // HorizontalScrollView의 크기 변경 (자식의 크기에 따라) adjustScrollViewWidth(); } }); } private void adjustScrollViewWidth() { // HorizontalScrollView 크기 변경 int width = 0; for (int i = 0; i < linearLayout.getChildCount(); i++) { View child = linearLayout.getChildAt(i); width += child.getWidth(); // 자식들의 총 크기를 합산 } ViewGroup.LayoutParams params = horizontalScrollView.getLayoutParams(); params.width = width; // 새 크기 설정 horizontalScrollView.setLayoutParams(params); } } ```

3. 추가 사항 - 최대 크기 설정 : 스크롤 뷰의 폭을 화면 크기에 맞추고 싶다면 `maxWidth` 속성으로 제한할 수 있습니다.

- 뷰 측정 후 크기 조정 : 동적으로 추가된 뷰들의 크기를 측정한 후에 `HorizontalScrollView`의 크기를 조정해야 하므로, 필요에 따라 `post()` 메서드를 사용하여 레이아웃이 완성된 후 측정할 수 있습니다.

이 방법으로 `HorizontalScrollView`의 크기를 동적으로 조정할 수 있으며, 추가적으로 다른 레이아웃이나 뷰 구성 요소와 조합하여 다양한 효과를 낼 수 있습니다.

작성자: 김도영 [비회원] | 작성일자: 1년 전 2025-04-19 11:20:58
조회수: 158 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.