본문 바로가기

Android/일반

안드로이드/Android statusbar, titlebar 높이 구하기

안드로이드/Android statusbar, titlebar 높이 구하기


안드로이드 statusbar와 titlebar를 기본적으로 사용하게 되는데요, 그렇다면 statusbar와 titlebar의 높이는 몇으로 설정되어 있는 것 일까요? 기본적으로 Density에 따라 높이가 달라지는데요,

LOW Density= 19px

MEDIUM Density= 25px

HIGH Density= 38px

값으로 설정 됩니다. 자 그럼 코드상에서 statusbar 와 titlebar의 높이를 구하는 방법을 알아 보겠습니다.

 

package arabiannight.tistory.com.status;

import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;

public class TestStatusBarHeightActivity extends Activity {

	private static final int LOW_DPI_STATUS_BAR_HEIGHT = 19;
	private static final int MEDIUM_DPI_STATUS_BAR_HEIGHT = 25;
	private static final int HIGH_DPI_STATUS_BAR_HEIGHT = 38;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		getStatusBarSizeOnCreate();
		
		LinearLayout layout = new LinearLayout(this);
		layout.post(new Runnable() {
			@Override
			public void run() {
				getStatusBarSize(); 
			}
		});
	}
	
	// StatusBar Size 구하는 메서드 ( onCreate에서 실행 불가능 )
	private void getStatusBarSize(){ 
		Rect rectgle= new Rect();
		Window window= getWindow();
		window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
		int StatusBarHeight= rectgle.top;
		int contentViewTop= 
				window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
		int TitleBarHeight= contentViewTop - StatusBarHeight;
		Log.i("StatusBarTest" , "StatusBar Height= " + StatusBarHeight +
				" TitleBar Height = " + TitleBarHeight);
	}
	
	// onCreate()에서 StatusBar 구하는 메서드 ( Density 이용 )
	private void getStatusBarSizeOnCreate(){ 
		DisplayMetrics displayMetrics = new DisplayMetrics();
		((WindowManager) getSystemService(Context.WINDOW_SERVICE))
		.getDefaultDisplay().getMetrics(displayMetrics);

		int statusBarHeight;

		switch (displayMetrics.densityDpi) {
		    case DisplayMetrics.DENSITY_HIGH:
		        statusBarHeight = HIGH_DPI_STATUS_BAR_HEIGHT;
		        break;
		    case DisplayMetrics.DENSITY_MEDIUM:
		        statusBarHeight = MEDIUM_DPI_STATUS_BAR_HEIGHT;
		        break;
		    case DisplayMetrics.DENSITY_LOW:
		        statusBarHeight = LOW_DPI_STATUS_BAR_HEIGHT;
		        break;
		    default:
		        statusBarHeight = MEDIUM_DPI_STATUS_BAR_HEIGHT;
		}
		Log.i("StatusBarTest" , "onCreate StatusBar Height= " + statusBarHeight);
	}
}





파일첨부 : 


TestStatusBarHeight.zip





출처 : http://stackoverflow.com/questions/3407256/height-of-status-bar-in-android