Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드에서 코드로 TextView의 레이아웃 가중치(Layout Weight)를 설정하는 방법

이 튜토리얼은 안드로이드에서 TextView의 레이아웃 가중치(layout weight)를 프로그래밍 방식으로 설정하는 방법을 단계별로 소개합니다. XML 레이아웃 대신 자바 코드로 뷰의 LayoutParams를 다루면, 버튼 클릭 같은 사용자 이벤트에 반응해 화면 구성을 실시간으로 변경할 수 있습니다.

1단계 — 새 프로젝트 생성

Android Studio에서 File ⇒ New Project 메뉴로 이동한 후, 프로젝트 생성에 필요한 정보를 모두 입력합니다. 템플릿은 Empty Activity, 언어는 Java를 선택하면 예제를 그대로 따라 할 수 있습니다.

2단계 — res/layout/activity_main.xml 작성

레이아웃 파일에 아래 코드를 추가합니다. 화면 정중앙에 버튼 하나를 배치하는 간단한 RelativeLayout 구조입니다.

<RelativeLayout
   xmlns:android="https://schemas.android.com/apk/res/android"
   xmlns:tools="https://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:gravity="center"
   tools:context=".MainActivity">
   <Button
      android:id="@+id/button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textStyle="bold"
      android:onClick="expand"
      android:textSize="24sp"
      android:text="Hello World"
      android:layout_centerInParent="true"/>
</RelativeLayout>

3단계 — src/MainActivity.java 작성

버튼을 클릭하면 뷰의 크기가 코드에서 지정한 값으로 바뀌도록 구현합니다.

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity {
   Button button;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }
   public void expand(View view) {
      int height = RelativeLayout.LayoutParams.MATCH_PARENT;
      int width = 500;
      RelativeLayout.LayoutParams layoutParams= new RelativeLayout.LayoutParams(width,height);
      button = findViewById(R.id.button);
      button.setLayoutParams(layoutParams);
   }
}

코드 해설: expand() 메서드는 RelativeLayout.LayoutParams 객체를 새로 만들어 너비를 500px, 높이를 MATCH_PARENT로 지정한 뒤 setLayoutParams()로 버튼에 적용합니다. 이렇게 하면 버튼을 누르는 순간 뷰의 크기가 즉시 변경됩니다.

레이아웃 가중치(weight)를 코드로 직접 지정하기

가중치는 부모 레이아웃이 LinearLayout일 때 적용됩니다. LinearLayout.LayoutParams 생성자의 세 번째 인자로 원하는 weight 값을 전달하면 됩니다.

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT,
        2f); // weight = 2
textView.setLayoutParams(params);

또한 최신 Android Studio 프로젝트는 AndroidX를 기본으로 사용하므로, android.support.v7.app.AppCompatActivity 대신 androidx.appcompat.app.AppCompatActivity를 import해야 한다는 점도 기억해 두세요.

4단계 — AndroidManifest.xml 작성

매니페스트에는 특별한 권한 선언 없이 기본 설정만으로 충분합니다. 아래 코드를 참고하세요.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
   package="app.com.sample">
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   </application>
</manifest>

앱 실행 및 결과 확인

실제 안드로이드 기기를 컴퓨터에 연결한 상태에서 앱을 실행해 보겠습니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하고, 목록에서 자신의 모바일 기기를 선택하세요. 그러면 기기에 아래와 같은 기본 화면이 표시됩니다.

안드로이드에서 코드로 TextView의 레이아웃 가중치(Layout Weight)를 설정하는 방법

이후 버튼을 클릭하면 코드에서 지정한 LayoutParams가 적용되어 뷰의 크기가 다음과 같이 확장되는 것을 확인할 수 있습니다.

안드로이드에서 코드로 TextView의 레이아웃 가중치(Layout Weight)를 설정하는 방법