Thay vì cố gắng tìm hiểu xem bạn có đang ở chế độ nhiều cửa sổ hay không và trên phần nào của màn hình, bạn cần đặt tiêu đề chế độ xem của tiêu đề chế độ xem của cửa sổ điều hướng.
Thông thường bạn chỉ quan tâm đến một cửa sổ - ứng dụng mà ứng dụng của bạn được vẽ. Thông thường bạn thậm chí không nghĩ có bất kỳ cửa sổ nào. Ứng dụng của bạn có được vẽ toàn màn hình không? Vâng, thực sự là không. Thông thường có một số không gian dành riêng cho thanh hệ thống, như thanh trạng thái ở trên cùng và thanh điều hướng ở dưới cùng. Chúng được vẽ trong các cửa sổ riêng biệt - các cửa sổ hệ thống. (Oh, và bây giờ chúng tôi đã có chế độ nhiều cửa sổ ở N. Giống như chế độ nhiều cửa sổ ứng dụng, bởi vì nếu bạn đếm các cửa sổ hệ thống thì nhiều cửa sổ đã được đặt trong một khoảng thời gian.)
Bạn có thể thực hiện tiêu đề xem điều hướng của bạn điều chỉnh insets của nó tùy thuộc vào việc nó nằm trong một cửa sổ hệ thống (trong trường hợp này là: thanh trạng thái) hay không chỉ với một vài tinh chỉnh đơn giản.
Giả giao diện điều hướng được định nghĩa như thế:
<android.support.design.widget.NavigationView
...
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
... />
và có một bố trí tiêu đề đơn giản trong nav_header_main.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/nav_header_background"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="32dp">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/default_profile_picture" />
...
</LinearLayout>
bạn chỉ cần thay đổi nó như thế:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/nav_header_background"
android:fitsSystemWindows="true"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/sym_def_app_icon"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="8dp"/>
...
</LinearLayout>
- Trước tiên, bạn cần thêm
android:fitsSystemWindows="true"
vào bố cục.
- Bây giờ, bạn cần tạo phần đệm trên cùng nhỏ hơn, vì
fitsSystemWindows
sẽ tự động thêm phần đệm của thanh trạng thái. Vì vậy, trước đây padding hàng đầu của bạn là từ đầu của tiêu đề của bạn, bây giờ nó chỉ là từ dưới cùng của thanh trạng thái.
- Và bạn phải di chuyển tất cả các phần đệm từ bố trí ở một nơi khác (ví dụ: tôi đã chuyển chúng sang lề trên các chế độ xem con), vì
fitsSystemWindows
sẽ ghi đè các phần đệm đó.
Sau này nếu ứng dụng của bạn ở phần dưới cùng của chia nhiều cửa sổ thì phần đệm cho thanh trạng thái sẽ không được thêm. Nó cũng sẽ làm cho giao diện điều hướng của bạn trông đúng trong bất kỳ trường hợp nào khác mà nó không nằm trong thanh trạng thái hoặc nếu thanh trạng thái thay đổi kích thước trong bất kỳ phiên bản Android nào trong tương lai hoặc một số ROM tùy chỉnh điên.
Nguồn
2016-08-25 21:43:19
Tôi nghĩ android: fitsSystemWindows = "true" trong NavigationView là đủ. Thêm android: fitsSystemWindows cũng trong bố cục tiêu đề sẽ khắc phục sự cố. Cảm ơn – br00
Tôi vừa phát hiện ra rằng giải pháp này chỉ hoạt động cho api 24+ – br00