본문 바로가기

안드로이드/코드

[안드로이드] 디바이스, 레이아웃 사이즈 구하기

반응형

 

 

디바이스, 레이아웃 사이즈_타이틀

 

 

 

 

 

 

디바이스, 레이아웃 사이즈_1

 

 

어플 개발을 하다 보면 각 기기마다 사이즈가 다르기 때문에 사이즈가 필요한 경우가 있습니다.

 

오늘은 어플을 실행한 기기의 가로, 세로 사이즈를 구해서 텍스트뷰에 띄워주는 예제를 만들어보겠습니다.

 

 

 

1. activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/ll"
        android:background="@drawable/ll_background"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="horizontal"
        app:layout_constraintTop_toTopOf="parent" >

        <TextView
            android:id="@+id/tv_ll"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:textSize="20sp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </LinearLayout>

    <TextView
        android:id="@+id/tv"
        android:gravity="center"
        android:textColor="@android:color/black"
        android:textSize="20sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

 

2.ll_background.xml(drawable폴더에 생성)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    android:useLevel="false">
    <stroke
        android:color="#0817a8"
        android:width="3dp"/>
</shape>

레이아웃을 구분하기 위해서 레이아웃에 테두리를 추가해주는 xml 소스입니다.

 

 

 

3.MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Point;
import android.os.Bundle;
import android.view.Display;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    LinearLayout ll;
    TextView tv;
    TextView tv_ll;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ll = findViewById(R.id.ll);
        tv = findViewById(R.id.tv);
        tv_ll = findViewById(R.id.tv_ll);

        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);

        tv.setText("device.width = " + size.x + "\ndevice.height = " + size.y);
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        tv_ll.setText("ll.width = " + ll.getWidth() + "\nll.height = " + ll.getHeight());
    }
}

 

 

레이아웃의 사이즈는 onCreate안에서는 얻어오지 못합니다.

 

onWindowFocusChanged 함수를 오버라이드 하셔서 그안에서 getWidth함수를 사용하셔야 얻어올 수 있습니다.

 

getWidth, getHeight 함수의 단위는 픽셀 단위로 값을 가져오기 때문에 xml코드에서 레이아웃에 설정해줬던 height와 수치가 다릅니다.

 

px, dp, dpi 계산 방법

 

px = dp x dpi / 160

dp = px x 160 / dpi 

 

dpi 

ldpi = 120dpi

mdpi = 160dpi

hdpi = 240dpi

xhdpi = 320dpi

xxhdpi = 480dpi

xxxhdpi = 640dpi

 

 

디바이스의 사이즈는 Display 클래스를 이용해서 얻어올 수 있습니다.

 

디바이스 사이즈는 onCreate함수 안에서도 가능합니다.

 

 

반응형