3

내 화면이 1080x1920입니다. 녹색 선의 높이는 1794, 빨간색 선은 63 (상태 표시 줄) + 84 (TitleBar) = 147, 보라색 선은 -1584입니다. 왜 보라색 선에 빨간색 선을 추가하여 녹색 선의 높이를 얻지 못합니까?높이 값의 차이가 나는 이유는 무엇입니까?

enter image description here

보라색 라인은 상대 레이아웃의 높이를 나타내며, 나는 onWindowFocusChanged()에서이 코드를 찾을 :

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.myRelativeLayout); 
Log.i(TAG, "Relative layout height: "+String.valueOf(relativeLayout.getHeight())); 

레드 라인은 제목 표시 줄과 상태 표시 줄의 높이가 나타내는 I이 그것을 발견 코드 onWindowFocusChanged() :

Rect rectangle = new Rect(); 
Window window = getWindow(); 
window.getDecorView().getWindowVisibleDisplayFrame(rectangle); 
int statusBarHeight = rectangle.top; 
int contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT).getTop(); 
int titleBarHeight= contentViewTop - statusBarHeight; 

Log.i(TAG, "StatusBar Height= " + statusBarHeight + " , TitleBar Height = " + titleBarHeight); 

녹색 줄 전체 프로그램의 높이를 나타낼 것이라고 가정합니다. 그리고 나는 onWindowFocusChanged()에서이 코드를 찾을 :

Display mdisp = getWindowManager().getDefaultDisplay(); 
Log.i(TAG, "mdisp: "+String.valueOf(mdisp)); 
Point mdispSize = new Point(); 
mdisp.getSize(mdispSize); 
int maxX = mdispSize.x; 
int maxY = mdispSize.y; 
Log.i(TAG, "Max X, Y: "+String.valueOf(maxX)+", "+String.valueOf(maxY)); 

XML 레이아웃 파일 내용 :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="lt.wilkas.stackoverflowquestion.MainActivity" 
    android:id="@+id/myRelativeLayout"> 

</RelativeLayout> 
+0

일부 패딩? 그림자 패딩? –

+0

어쩌면, 그러나 그들은 어디에 적용합니까? 이 문제를 해결하기 위해 노력하고 있어요 http://stackoverflow.com/questions/39187745/how-to-implement-detection-of-a-view-being-dragged-over-another-view하지만 이러한 불일치 좌표에서 날 가져옵니다. 혼란 스럽군요 : ( – wilkas

답변

2

귀하의 제목 표시 줄의 높이가 정확하지입니다. 보시다시피, 제목 표시 줄의 높이가 상태 표시 줄 높이의 두 배 이상으로 시각적으로 표시됩니다. 따라서 다른 방법을 사용하여 제목 표시 줄의 높이를 확인하십시오.

이 같은 얻을 수 있습니다 :

int whiteParentHeight = 0; 
int titlebarHeight = 0; 

public int getTitleBarHeight() { 

whiteParent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 

      if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
       //noinspection deprecation 
       whiteParent.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
      } else { 
       whiteParent.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      } 

      whiteParentHeight = whiteParent.getHeight(); 
      titlebarHeight = whiteParentHeight - getStatusBarHeight(); 

     } 
    }); 

} 


public int getStatusBarHeight() { 

    int result = 0; 
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); 

    if (resourceId > 0) { 
     result = getResources().getDimensionPixelSize(resourceId); 
    } 

    return result; 

} 

또는 기본 제목 표시 줄의 높이를 찾기 위해, 당신은 사용할 수 있습니다

final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
       new int[] { android.R.attr.actionBarSize }); 
mActionBarSize = (int) styledAttributes.getDimension(0, 0); 
styledAttributes.recycle(); 

희망이 당신을 도울 것입니다.

+0

여기에 whiteparent는 무엇입니까? 주요 상대 레이아웃입니까? – wilkas

+0

상태 표시 줄에는 63, 상태 표시 줄에는 0이 있습니다. – wilkas

+0

예, 스크린 샷에 표시된 흰색 영역 부모는 상태 표시 줄 높이가 –