SystemWindows에 정확히 맞는 것은 무엇입니까?
나는 fitsSystemWindows
그것이 다른 일을한다는 관점에 따라 개념을 이해하기 위해 고심 하고 있습니다. 공식 문서에 따르면
상태 표시 줄과 같은 시스템 창을 기반으로 뷰 레이아웃을 조정하는 부울 내부 속성입니다. true 인 경우이보기의 패딩을 조정 하여 시스템 창을위한 공간을 확보하십시오 .
이제 View.java
클래스를 확인 하면로 설정 true
하면 창 삽입물 (상태 표시 줄, 탐색 표시 줄 ...)이 뷰 패딩에 적용되며 위에서 인용 한 문서에 따라 작동합니다. 이것은 코드의 관련 부분입니다.
private boolean fitSystemWindowsInt(Rect insets) {
if ((mViewFlags & FITS_SYSTEM_WINDOWS) == FITS_SYSTEM_WINDOWS) {
mUserPaddingStart = UNDEFINED_PADDING;
mUserPaddingEnd = UNDEFINED_PADDING;
Rect localInsets = sThreadLocal.get();
if (localInsets == null) {
localInsets = new Rect();
sThreadLocal.set(localInsets);
}
boolean res = computeFitSystemWindows(insets, localInsets);
mUserPaddingLeftInitial = localInsets.left;
mUserPaddingRightInitial = localInsets.right;
internalSetPadding(localInsets.left, localInsets.top,
localInsets.right, localInsets.bottom);
return res;
}
return false;
}
새로운 머티리얼 디자인에는이 플래그를 광범위하게 사용하는 새로운 클래스가 있으며 여기에 혼동이 생깁니다. 많은 소스 fitsSystemWindows
에서 시스템 막대 뒤에 뷰를 배치하도록 설정하는 플래그로 언급됩니다. 여기를 참조 하십시오 .
에 대한 설명서는 다음 ViewCompat.java
과 setFitsSystemWindows
같이 말합니다.
이 뷰가 상태 표시 줄과 같은 시스템 화면 장식을 설명하고 내용을 삽입해야하는지 여부를 설정합니다. 즉, {@link View # fitSystemWindows (Rect)}의 기본 구현을 실행할지 여부를 제어합니다. 자세한 내용은 해당 방법을 참조하십시오 .
이것에 따르면, fitsSystemWindows
단순히 기능 fitsSystemWindows()
이 실행 된다는 것을 의미 합니까? 새로운 머티리얼 클래스는 상태 바 아래에서 그리기 위해 이것을 사용하는 것 같습니다. DrawerLayout.java
의 코드를 보면 다음을 볼 수 있습니다.
if (ViewCompat.getFitsSystemWindows(this)) {
IMPL.configureApplyInsets(this);
mStatusBarBackground = IMPL.getDefaultStatusBarBackground(context);
}
...
public static void configureApplyInsets(View drawerLayout) {
if (drawerLayout instanceof DrawerLayoutImpl) {
drawerLayout.setOnApplyWindowInsetsListener(new InsetsListener());
drawerLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
}
그리고 우리는 새로운 CoordinatorLayout
또는 에서 동일한 패턴을 봅니다 AppBarLayout
.
이 문서와 정확히 반대의 방식으로 작동하지 fitsSystemWindows
않습니까? 마지막 경우 에는 시스템 막대 뒤에 그려야 함을 의미 합니다 .
그러나 FrameLayout
상태 표시 줄 뒤에 자체를 그리 려면 fitsSystemWindows
기본 구현이 처음에 문서화 된 작업을 수행하므로 true로 설정 하면 트릭이 수행되지 않습니다. 이를 무시하고 언급 된 다른 클래스와 동일한 플래그를 추가해야합니다. 뭔가 빠졌습니까?
시스템 창은 시스템이 비 대화식 (상태 표시 줄의 경우) 또는 대화식 (탐색 표시 줄의 경우) 컨텐츠를 그리는 화면의 일부입니다.
대부분의 경우 앱은 상태 표시 줄이나 탐색 표시 줄 아래에 그릴 필요가 없지만 그렇게하면 버튼과 같은 대화 형 요소가 그 아래에 숨겨져 있지 않아야합니다. 이것이 android : fitsSystemWindows =“true”속성의 기본 동작입니다. 내용이 시스템 창에 겹치지 않도록보기의 패딩을 설정합니다.
https://medium.com/google-developers/why-would-i-want-to-fitssystemwindows-4e26d9ce1eec
시스템 막대 뒤에 그려지지 않고 같은 색상으로 색조를 지정하기 위해 막대 뒤에 뻗어 있지만 포함 된보기는 상태 표시 줄 안에 채워집니다.
참고URL : https://stackoverflow.com/questions/31761046/what-exactly-does-fitssystemwindows-do
'program story' 카테고리의 다른 글
Emacs에서 knitr Markdown 하이라이트? (0) | 2020.07.29 |
---|---|
비동기 적으로 초기화 된 React.js 컴포넌트의 서버 측 렌더링 전략 (0) | 2020.07.29 |
안드로이드 파이썬 프로그래밍 (0) | 2020.07.29 |
FFmpeg C API 문서 / 튜토리얼 (0) | 2020.07.29 |
Internet Explorer 11 문서 모드를 에뮬레이션 할 때 Internet Explorer 11에서 조건부 주석을 사용하지 않는 이유는 무엇입니까? (0) | 2020.07.29 |