안드로이드 UI 구성 및 설정 시 발생하는 주요 이슈 해결 방법

ViewPager 내 ImageView를 화면에 꽉 차게 배치하기

ViewPager를 사용하여 이미지 슬라이더를 구현할 때, 이미지와 화면 가장자리 사이에 의도치 않은 공백이 발생하는 경우가 있습니다. 이는 ImageView의 기본 스케일 방식 때문이며, ScaleType 설정을 통해 해결할 수 있습니다.

방법 1: 자바/코틀린 코드에서 설정

ImageView slideImage = new ImageView(context);
slideImage.setScaleType(ImageView.ScaleType.FIT_XY); // 화면에 가득 채우도록 설정

방법 2: XML 레이아웃에서 설정

<ImageView
    android:id="@+id/view_pager_item"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitXY" />

TextView의 텍스트 색상 설정 오류 수정

setTextColor() 메서드에 R.color.name과 같은 리소스 ID를 직접 전달하면 색상이 정상적으로 반영되지 않습니다. 반드시 리소스에서 실제 색상 값을 추출하여 전달해야 합니다.

// 잘못된 방법
// myTextView.setTextColor(R.color.gray);

// 올바른 방법
int colorValue = ContextCompat.getColor(context, R.color.gray);
myTextView.setTextColor(colorValue);

화면 방향 고정 및 회전 제어

기기가 회전할 때 액티비티가 재시작되는 것을 방지하거나 특정 방향으로 고정하고 싶을 때 다음 설정을 사용합니다.

1. AndroidManifest.xml에서 방향 고정

android:screenOrientation="landscape" // 가로 모드 고정
android:screenOrientation="portrait"  // 세로 모드 고정

2. 코드 내에서 동적으로 방향 설정

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    setContentView(R.layout.activity_main);
}

3. 구성 변경 시 액티비티 재시작 방지

android:configChanges="orientation|screenSize" 속성을 Manifest에 추가하면 화면 회전 시 onCreate가 아닌 onConfigurationChanged 메서드가 호출됩니다.

HorizontalScrollView 스크롤바 숨기기 및 스크롤 제어

스크롤바를 시각적으로 제거하고 버튼 클릭 등으로 스크롤을 제어하는 방법입니다.

<HorizontalScrollView
    android:id="@+id/h_scroll_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scrollbars="none"> 
</HorizontalScrollView>

코드에서 특정 방향으로 스크롤 이동:

// 왼쪽으로 이동
leftBtn.setOnClickListener(v -> hScrollView.arrowScroll(View.FOCUS_LEFT));

// 오른쪽으로 이동
rightBtn.setOnClickListener(v -> hScrollView.arrowScroll(View.FOCUS_RIGHT));

기기 화면 크기에 따른 뷰 크기 동적 조절

특정 뷰를 기기의 화면 해상도에 맞춰 동적으로 조절해야 할 경우 DisplayMetrics를 활용합니다.

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

int deviceWidth = displayMetrics.widthPixels;
int deviceHeight = displayMetrics.heightPixels;

LayoutParams layoutParams = targetView.getLayoutParams();
layoutParams.width = deviceWidth;
layoutParams.height = deviceHeight / 2; // 화면 높이의 절반으로 설정
targetView.setLayoutParams(layoutParams);

TextView에 아이콘(Drawable) 동적 추가

XML의 drawableRight 속성을 코드에서 구현할 때는 setCompoundDrawablesWithIntrinsicBounds를 사용하는 것이 편리합니다.

Drawable icon = ContextCompat.getDrawable(this, R.drawable.ic_check);
// 좌, 상, 우, 하 순서대로 설정
targetTextView.setCompoundDrawablesWithIntrinsicBounds(null, null, icon, null);

ListView 구분선(Divider)에 여백 주기

구분선이 양옆에 여백을 가지도록 하려면 inset 드로어블을 정의하여 사용합니다.

res/drawable/custom_divider.xml

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="16dp"
    android:insetRight="16dp">
    <shape android:shape="rectangle">
        <solid android:color="#CCCCCC" />
    </shape>
</inset>

레이아웃 적용

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="@drawable/custom_divider"
    android:dividerHeight="1dp" />

스크롤바 페이드 효과 비활성화

ScrollView나 HorizontalScrollView에서 스크롤바가 사라지지 않고 항상 표시되도록 하거나 페이드 효과를 제어할 때 사용합니다.

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fadeScrollbars="false"
    android:scrollbarFadeDuration="0" />

태그: Android ViewPager imageview TextView ScrollView

8월 4일 09:23에 게시됨