안드로이드 레이아웃 사이즈를 구하고 동적으로 가로 세로 사이즈를 변경 할때 

고생 하시는분들을 위한 레이아웃 (layout) 사이즈 구하는 방벙을 모아 봤습니다.


아래 소스는 layout 의 가로 세로 사이즈를 구하고 layout 의 가로 세로 사이즈를 수정 하는 방법 입니다.

추가로 layout 사이즈를 구하는 소를 응용하여 가로 세로 사이즈를 비율로 동적으로 수정하는 방법으로 

올렸습니다.


아래 소스에 좋은 의견이나 문제가 있는 부분은 댓글로 달아 주시면 감사하겠습니다.


레이아웃 onWindowFocusChanged(boolean hasFocus) 를 이용한 사이즈 구하기 방법입니다.

@Override

public void onWindowFocusChanged(boolean hasFocus) {

View layoutMainView = (View)this.findViewById(R.id.mainLayout);

Log.w("Layout Width - ", String.valueOf(layoutMaintView.getWidht()));

Log.w("Layout Height - ", String.valueOf(layoutMaintView.getHeight()));

}


레이아웃 post trhead를 이용한 레이아웃 사이즈를 구하는 방법 

( 참고: 레이아웃이 생성된 후 사이즈를 구하기 때문에 사이즈를 구한 후 사이즈를 이용하여 다른 작업 하기에는 시간차가 있습니다. )

final LinearLayout layout = (LinearLayout)view.findViewById(R.id.capaign_row_img_lay); layout .post(new Runnable() {

@Override public void run() {

Log.e(" size ", "Width size= " + layout .getWidth());

Log.e(" size ", "Height size= " + layout .getHeight()); } });


레이아웃 OnGlobalLaoutListener 이용한 방법 ( 사이즈를 구하고 동적으로 사이즈 수정하는데 가장 효과적인듯 합니다. )

final LinearLayout layout = (LinearLayout)view.findViewById(R.id.capaign_row_img_lay); ViewTreeObserver vto = imglay.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

layout .getViewTreeObserver().removeGlobalOnLayoutListener(this);

int width = layout .getMeasuredWidth();

int Height = imglay.getMeasuredHeight(); } });


위에방법을 응용한 사이즈 구한 후 비율로 세로 사이즈를 변경 하는 소스 입니다. 

( 이미지를 일정 비율로 작업하고 비율로 여러 해상도에 보여주기 위한 방법  참고: 제가 만든 예제 임으로 머라구 하지마세요 ^^)


final LinearLayout layout = (LinearLayout)view.findViewById(R.id.capaign_row_img_lay);

 final LayoutParams mLayoutParam = (LayoutParams)layout.getLayoutParams();     mLayoutParam.height   = ScreenSize(위에 설명 드린 소스를 사용하여 사이즈를 구하여 가로 사이즈를 입력); layout.setLayoutParams(mLayoutParam); layout.setGravity(Gravity.CENTER);

/**

* @return 4:2 사이즈 비율 세로사이즈 리턴

*/

public int ScreenSize(int width){

  int size = 0;

//아래주석을 풀면 해상도 사이즈를 구해서 세로 사이즈를 구합니다.

//DisplayMetrics mDisplay = new DisplayMetrics(); //mContext.getWindowManager().getDefaultDisplay().getMetrics(mDisplay);

// size = mDisplay.widthPixels

  size = width;

  size = size / 4;

  size = size * 2;

  return size;

}

+ Recent posts