본문 바로가기
안드로이드

[Android] 레이아웃 크기 동적으로 제어하기 - LayoutParams

by 책 읽는 개발자_테드 2020. 9. 17.
반응형

팝업이 모든 디바이스에서 같은 비율로 보이도록 개발이 필요했다.

 

안드로이드 OS 사용하는 디바이스는 서로 가로, 세로 비율이 다르다. 

때문에 해당 부분을 보완하는 작업이 필요했다.

 

처음에는 XML 파일에서 width, height를 고정하려 했지만,

그러면 화면이 작은 디바이스에는 팝업이 가득차고, 화면이 큰 디바이스에는 팝업이 작게 보이는 문제가 있었다.

 

그래서 Java 코드를 통해 동적으로 디바이스 크기를 알아내서, 

그 크기에 맞는 팝업을 만들기로 결정했다.

 

코드는 다음과 같다.

    
    LinearLayout popupLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
     	popupLayout = findViewById(R.id.popupLayout);
        //팝업 크기 설정
        setPupSize();

    }
    
    
    /*
     * 팝업 크기 설정
     */
    private void setPupSize() {
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        int widthPixels = metrics.widthPixels * 8/10;
        int heightPixels = widthPixels * 191/124;

        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(widthPixels,heightPixels);

        params.gravity = Gravity.CENTER;

        popupLayout.setLayoutParams(params);
    }

 

위 코드 처럼

 

해당 코드로 디바이스의 화면 크기를 알아내고,

DisplayMetrics metrics = getResources().getDisplayMetrics(); 

 

동적으로 레이아웃의 크기를 바꾸면된다. 

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(widthPixels,heightPixels);
params.gravity = Gravity.CENTER;
popupLayout.setLayoutParams(params);

 

주의할 점은, LayoutParams 인스턴스는 동적으로 바꿀 레이아웃의 부모 레이아웃 기준으로 생성한다.

(동적으로 바꿀 레이아웃은 LinearLayout이지만, 부모 레이아웃은 FrameLayout이었다)

 

 

구현 화면

 

 

반응형

댓글