2016-06-13 4 views
1

생산 :토스트 잘못된 중력 수직

toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0); 

을 ... 축배의 상단 가장자리는 화면 상단에서 약 24 픽셀이다. 축배의 배경은 약 48 픽셀 높이가됩니다. 일치? 무슨 일 이니?

+0

'Gravity' A는'Toast' 당신이 그것을 원하는 위치의 일반적인 문이와 함께. 절대 위치가 아닙니다. – CommonsWare

+0

@CommonsWare 일반 위치에서 정확한 오프셋을 허용하는 API의 핵심은 무엇입니까? –

+0

음 ... 좋은 질문입니다. 나는 다른 두 개의 매개 변수가 X와 Y 오프셋이라는 사실을 잊어 버렸습니다. 내 사과. 'Toast' 소스 코드는 그 값이'Toast' 윈도우에 사용되는'WindowManager.LayoutParams'에 들어가는 것을 보여줍니다. – CommonsWare

답변

1

난 안 그래도 솔루션에 대한 설명을 발견 (내가 원하는 위치 화면의 상단. 난 단지 수직 위치가 잘못된 이유를 파악하려고 거기에 넣어. 정말 아니다). 토스트 위치는 탐색 및 상태 표시 줄이 전체 화면 모드에서 숨겨져 있고 보이는 것처럼 위치를 차지하는 것을 고려하지 않습니다.

내 활동으로 전체 화면 모드를 onCreateonWindowFocusChanged으로 설정합니다. 나는 토스트를 onPostResume에서 처리기에 게시하여 가능한 한 늦게 표시하려고 시도했지만 시스템 UI가 표시된 것처럼 여전히 동작합니다. 내가 뭔가를 누락 경우

이 내가 전체 화면 모드를 설정 해요 방법은 다음과 같습니다

@TargetApi(Build.VERSION_CODES.KITKAT) 
private void enableFullScreenMode() { 
    int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE; 

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
     flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
       | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_IMMERSIVE 
       | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 
    } 

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
    } 
    getWindow().getDecorView().setSystemUiVisibility(flags); 

    /* Calling setSystemUiVisibility directly works most of the time, but 
    * sometimes the navigation bar gets stuck, covering part of the UI. 
    * Posting it seems to prevent this. */ 
    final int finalFlags = flags; 
    getWindow().getDecorView().post(new Runnable() { 
     @Override 
     public void run() { 
      getWindow().getDecorView().setSystemUiVisibility(finalFlags); 
     } 
    }); 
}