Biểu tượng mục ngăn kéo điều hướng không hiển thị màu gốc


138

Tôi đang cố gắng hiển thị một biểu tượng bên cạnh một mục trong menu cho ngăn kéo điều hướng của mình, nhưng vì một số lý do, biểu tượng luôn xuất hiện với màu xám thay vì màu gốc (màu nâu). Có cách nào ngăn chặn điều này xảy ra để hiển thị màu gốc của biểu tượng không?

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        if (navigationView != null) {
            setupDrawerContent(navigationView);
        }
    }

    private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                mDrawerLayout.closeDrawers();

                return true;
            }
        });
    }
}

ngăn kéo_view.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:title="Section">
        <menu>
            <item
                android:id="@+id/navigation_item_1"
                android:icon="@drawable/ic_browncircle"
                android:title="Sub item 1" />
        </menu>
    </item>
</menu>

nhập mô tả hình ảnh ở đây


Có gì trong bạn ic_browncircle?
Ye Lin Aung

@YeLinAung Một vòng tròn màu nâu giống như biểu tượng ở trên bên cạnh 'Mục phụ 1' nhưng có màu nâu, không phải màu xám.
MacaronLover

Có lẽ bạn có thể thử .setColorFilter(MY_BROWN_COLOR)quan điểm đó?
Ye Lin Aung

Xin vui lòng xem câu trả lời của tôi dưới đây.
Ye Lin Aung

Câu trả lời:


350

Tôi tìm thấy câu trả lời ở đây: https://stackoverflow.com/a/30632980/875249

Để tránh các liên kết khá đơn giản:

    mNavigationView.setItemIconTintList(null);

Điều này vô hiệu hóa tất cả các pha màu dựa trên trạng thái, nhưng bạn cũng có thể chỉ định danh sách của riêng bạn. Nó làm việc rất lớn đối với tôi!

Đây là nơi bạn có thể nhận được các chi tiết về cách tạo danh sách trạng thái màu, nhưng nó cũng khá đơn giản: http://developer.android.com/reference/android/content/res/ColorStateList.html

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_checked="true" android:color="@color/primary" />
        <item android:state_checked="false" android:color="@android:color/white" />
    </selector>

Vâng, tôi đã thử nghiệm nó trên Nexus 4 chạy API 17. Tôi cũng đã thử nghiệm trên bản xem trước Android M. ColorStateList đã xuất hiện được một thời gian và NavigationView là một phần của thư viện hỗ trợ vì vậy tôi không thấy lý do tại sao điều này sẽ không hoạt động hoàn toàn với ICS và thậm chí có thể quay lại.
Chris

11
Bất kỳ thay thế XML cho điều này? Đã thử app:itemIconTint="@null"nhưng không thành công.
Mangesh

Cảm ơn, tôi đã bắt đầu đau đầu với vấn đề này
wax911

4
mNavigationView.setItemIconTintList(null);Đây là câu trả lời tôi đã tìm kiếm rất lâu ...
Jahid

1
Bạn sử dụng công cụ chọn ở đâu?
John Sardinha

49

Sử dụng

    mNavigationView.setItemIconTintList(null);

Đúng rồi. Ngoài ra Nếu tất cả các biểu tượng của bạn trong một bảng màu (tôi có tất cả màu trắng), bạn có thể thiết lập thông qua tệp xml - ứng dụng: itemIconTint = "@ android: color / white"

Trường hợp của tôi

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:clickable="true"
    app:headerLayout="@layout/nav_header_main"
    app:itemTextColor="@android:color/white"
    app:menu="@menu/activity_main_drawer"
    android:background="@android:color/black"
    app:itemIconTint="@android:color/white"
    />

Bạn có biết làm thế nào để giải quyết vấn đề khác này?
MacaronLover

Cái này hoạt động tốt, mNavigationView.setItemIconTintList(null);loại bỏ iconTint mặc định khỏi tất cả các biểu tượng. Bây giờ nếu bạn có biểu tượng của mình màu đỏ, nó sẽ xuất hiện màu đỏ, không có biểu tượng nào được áp dụng.
Syed Hissaan

5

Tôi đã thử một cái gì đó tương tự trong một trong các ứng dụng của tôi. Và vâng, dường như màu sắc biểu tượng không thay đổi. Nhưng tôi đã xoay sở để làm với một cách giải quyết khác. Đây là của tôiic_browncircle.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval"
    android:tint="@color/brown"
    >
  <size
      android:height="3dp"
      android:width="3dp"
      />
  <solid android:color="@color/brown"/>
</shape>

Mà tôi tin là một cái gì đó tương tự như bạn nhưng nó không có tác dụng và không thay đổi màu sắc.

Vì vậy, những gì tôi đã làm là điều này.

navigationView.getMenu()
    .findItem(R.id. navigation_item_1)
    .getIcon()
    .setColorFilter(Color.parseColor("#b69260"), PorterDuff.Mode.SRC_ATOP);

Và nó có vẻ hiệu quả. Đây là kết quả.

nhập mô tả hình ảnh ở đây


Còn về tiền Lollipop thì sao?
MacaronLover

Tôi đã thử một số giải pháp cho tiền Lollipop. Cho đến nay, vẫn chưa có may mắn :(
Ye Lin Aung

4

Nếu bạn tạo một dự án với ngăn kéo điều hướng Android Studiođược cung cấp. Trong lớp Hoạt động chính của bạn, bạn chỉ cần thêm dòng mã này navigationView.setItemIconTintList(null);vào onCreatephương thức của mình . Như thế này;

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
 navigationView.setNavigationItemSelectedListener(this);
 navigationView.setItemIconTintList(null); // <----- HERE
 setupDrawerContent(navigationView);

3

Bạn có thể thử sử dụng một tinted drawable, không chắc nó có hoạt động dưới 5.0 không.

Tạo một drawable và thêm mã sau đây.

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/ic_browncircle"
    android:tint="@color/brownColor"/>

Và sau đó thay đổi mục menu của bạn có thể rút ra thành mục bạn vừa tạo. Nếu điều đó không hiệu quả, thì tôi không chắc có giải pháp nào khác. Bạn có thể thử thư viện này: https://github.com/mikepenz/M vật liệuDrawer Tôi sử dụng nó rất nhiều trong các dự án của tôi.


Phương pháp này không hoạt động trên API 17 (4.2). Lý do (ít nhất là theo kinh nghiệm của tôi), là ngăn kéo điều hướng tự động phủ lên một biểu tượng màu trắng với tông màu đen khi bạn đặt chủ đề của mình thành ánh sáng. Khi tôi loại bỏ ánh sáng khỏi chủ đề của mình, các biểu tượng của tôi trở lại màu trắng như tôi dự định.
Chris

1

Chỉ cần thêm một dòng trong xml

app:itemIconTint="@color/white"


Hoặcapp:itemIconTint="@null"
Vlad

1

Một số cách mã này không hoạt động MainActivity.java

                NavigationView.setItemIconTintList(null); // not working

vì vậy bạn có thể sử dụng nó

MainActivity.java

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
   navigationView.setNavigationItemSelectedListener(this); 
   navigationView.setItemIconTintList(null); // <-- HERE add this code for icon color

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.