26

Vì vậy, tôi đang sử dụng NavigationView cung cấp bởi Android Design Support LibraryCách tạo kiểu NavigationView của thư viện Hỗ trợ thiết kế?

enter image description here

tôi dường như không thể tìm thấy ví dụ về cách để định dạng.

Cho đến nay tôi có:

<android.support.design.widget.NavigationView 
    android:id="@+id/navigation_view" 
    android:layout_height="match_parent" 
    android:layout_width="wrap_content" 
    android:layout_gravity="start" 
    app:headerLayout="@layout/header" 
    app:menu="@menu/drawer" 
    app:itemTextColor="@color/black" 
    app:itemIconTint="@color/black"/> 

Tạo kiểu header là dễ dàng như mình theo bố cục xml riêng của mình nhưng cơ thể là một tập tin tài nguyên đơn và không phải là một cách bố trí.

  • app:itemTextColor thay đổi màu sắc văn bản
  • app:itemIconTint thay đổi màu sắc biểu tượng
  • app:itemBackground thay đổi màu nền mục

Vậy làm thế nào để thiết lập

  • chọn nền mục
  • chọn text item màu
  • chọn biểu tượng mục tint

Trả lời

45

Tôi đã trả lời cho một câu hỏi tương tự Here.

Về cơ bản những gì bạn cần làm là sử dụng Color State List Resource. Để làm điều đó, trước tiên hãy tạo một xml mới (ví dụ: drawer_item.xml) bên trong thư mục color (nằm trong thư mục res.) Nếu bạn chưa có thư mục có tên màu, hãy tạo một thư mục.

Bây giờ bên drawer_item.xml làm điều gì đó như thế này

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:color="checked state color" android:state_checked= "true" /> 
    <item android:color="your default color" /> 
</selector> 

Đối itemBackground, một nhu cầu drawable riêng biệt được đặt bên trong thư mục drawable quá. Tên là giống nhau drawer_item. android:drawable tài sản cần phải được đặt thay vì android:color cho itemBackground:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:drawable="@drawable/shape_rectangle_checked" 

     android:state_checked= "true" /> 
    <item android:drawable="@drawable/shape_rectangle" /> 

</selector> 

file shape_rectangle:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
<solid android:color="#ffffff" /> <!--white color --> 
</shape> 

file shape_rectangle_checked:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
<solid android:color="#25aaf1" /> <!--blue color --> 
</shape> 

và sau đó thiết lập trong navigationview của bạn như

này
app:itemIconTint="@color/drawer_item" //notice here 
app:itemTextColor="@color/drawer_item" //and here 
app:itemBackground="@drawable/drawer_item"//and here for changing the background color of the item which is checked 
+1

Tôi đặt xml dưới res/color nhưng nó nói 'Tài nguyên $ NotFoundException: File res/color/drawer_menu_item.xml từ tài nguyên drawable' –

+0

Vui lòng kiểm tra chỉnh sửa của tôi và cho biết nếu nó làm việc cho bạn. –

+1

Thêm bản vẽ bên trong strings.xml .. Có lẽ cách tốt nhất để bạn bị mất trong các tệp của mình :) – geecko

2

Để mở rộng câu trả lời của @ Sash_KP, đối với xml trong thư mục drawable, bạn không cần @drawable/shape_rectangle@drawable/shape_rectangle_check. Bạn chỉ có thể sử dụng @color/your_color.

Cũng cho API >= 21, tôi đã nhận thấy rằng các mục menu điều hướng theo mặc định có bộ chọn được đặt sẵn.Bạn sẽ nhận thấy nếu bạn chạm và giữ mục trình đơn, một gợn sóng sẽ xuất hiện. Sử dụng tùy chỉnh itemBackground sẽ không ghi đè lên gợn mặc định. Do đó, nếu bạn sử dụng ripple drawable, nó sẽ tạo hai gợn sóng! Ngoài ra các mục menu với ripple drawables không cho phép bạn có trạng thái nhấn vì một số lý do (gợn mặc định sẽ chỉ xuất hiện nếu bạn GIỮ).

Vì vậy, đối với API >= 21 Tôi sẽ không khuyên bạn sử dụng ripple drawable. Chỉ cần sử dụng số selector drawable thông thường mà không có gợn sóng tùy chỉnh.

Các vấn đề liên quan