반응형
어플 개발을 하다 보면 각 기기마다 사이즈가 다르기 때문에 사이즈가 필요한 경우가 있습니다.
오늘은 어플을 실행한 기기의 가로, 세로 사이즈를 구해서 텍스트뷰에 띄워주는 예제를 만들어보겠습니다.
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함수 안에서도 가능합니다.
반응형
'안드로이드 > 코드' 카테고리의 다른 글
[안드로이드] 리싸이클러뷰 아이템 클릭시 이벤트 발생 시키기 (4) | 2020.03.23 |
---|---|
[안드로이드] Json 데이터를 받아서 한번에 객체에 담기 - JsonObjectRequest, JSONObject, Gson (0) | 2020.01.25 |
[안드로이드] 랜덤으로 로또 번호 자동 생성해서 번호 이미지 띄우기 (49) | 2020.01.09 |
[안드로이드] QR코드 인식해서 로또 당첨 조회 하기 (0) | 2020.01.07 |
[온라인마케팅] 애드센스 크롤러 액세스 등록 (0) | 2020.01.07 |