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

안드로이드 앱에서 픽셀(PX)을 DP로 변환하는 방법 완벽 가이드

안드로이드에서 픽셀을 DP로 변환하는 방법

이 튜토리얼에서는 안드로이드 앱 개발 시 픽셀(Pixel)을 DP(Density-independent Pixel, 밀도 독립 픽셀)로 변환하는 방법을 단계별로 살펴봅니다.

DP는 화면 밀도와 관계없이 일관된 UI 크기를 유지하기 위해 사용하는 단위입니다. 반면 픽셀(px)은 화면의 물리적인 점을 의미하기 때문에, 기기마다 동일한 px 값이라도 실제로 표시되는 크기가 달라질 수 있습니다. 따라서 코드에서 크기를 동적으로 계산할 때는 px를 dp로 변환해 주는 것이 좋습니다.

변환에 사용되는 기본 공식은 다음과 같습니다.

dp = px ÷ (디스플레이 밀도(densityDpi) ÷ 160)

1단계 — 새 프로젝트 생성

Android Studio를 실행하고 File ⇒ New Project 메뉴로 이동한 후, 새 프로젝트 생성에 필요한 모든 항목을 입력하여 프로젝트를 만듭니다.

2단계 — 레이아웃 파일 작성

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
   xmlns:android="https://schemas.android.com/apk/res/android"
   xmlns:tools="https://schemas.android.com/tools"
   android:id="@+id/rl"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:padding="10dp"
   tools:context=".MainActivity" >
   <Button
      android:id="@+id/btn"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Convert Pixels to DPs"
      android:layout_centerInParent="true" />
   <TextView
      android:id="@+id/tv"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:fontFamily="Sans-Serif-Condensed"
      android:textSize="14dp"
      android:layout_below="@id/btn"
      android:textStyle="italic"
      android:textColor="#ff0000" />
</RelativeLayout>

3단계 — 메인 액티비티 코드 작성

src/MainActivity.java 파일에 아래 코드를 추가합니다. 버튼 클릭 시 정수형 dp 값과 소수점까지 포함된 정확한 dp 값을 각각 계산하여 화면에 표시합니다.

import android.content.Context;
import android.content.res.Resources;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      final RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl);
      final Button btn = (Button) findViewById(R.id.btn);
      final TextView tv = (TextView) findViewById(R.id.tv);
      btn.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            int pixels_one = 38;
            int pixels_two = 43;
            Context context = getApplicationContext();
            tv.setText("Convert Pixels to integer DPs value: \n"
               + pixels_one+"pixels = " + getDPsFromPixels(context,pixels_one) + "dp\n"
               + pixels_two+"pixels = " +
               getDPsFromPixels(context,pixels_two)+ "\n");
            tv.setText(tv.getText()+ "Convert Pixels to perfect DPs value: \n"
               + pixels_one+ "pixels = "+ getActualDPsFromPixels(context, pixels_one)
               + "dp\n" +pixels_one+ "pixels = "+ getActualDPsFromPixels(context, pixels_one));
         }
      });
   }
   public static int getDPsFromPixels(Context context, int pixels){
      Resources r = context.getResources();
      int dps = Math.round(pixels/(r.getDisplayMetrics().densityDpi/160f));
      return dps;
   }
   public static float getActualDPsFromPixels(Context context, int pixels){
      Resources r = context.getResources();
      float dps = pixels/(r.getDisplayMetrics().densityDpi/160f);
      return dps;
   }
}

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(실행) 아이콘을 클릭하세요. 목록에서 본인의 모바일 기기를 선택하면, 기기 화면에 아래와 같은 결과가 표시됩니다.

안드로이드 앱에서 픽셀(PX)을 DP로 변환하는 방법 완벽 가이드

안드로이드 앱에서 픽셀(PX)을 DP로 변환하는 방법 완벽 가이드