2014-04-16 13 views
11

Câu hỏi này đã được hỏi rất nhiều về SO và tôi đã tham chiếu tất cả các câu trả lời. Tôi vẫn còn lại với nền màu xanh Holo mặc định cho các mục đã chọn trên ngăn điều hướng của tôi. Tôi mới sử dụng Java và tôi bối rối về phần "ngữ cảnh" của .setAdapter().
Dự án của tôi là một Hoạt động có nhiều phần được hoán đổi bằng ngăn kéo điều hướng.Màu nền tùy chỉnh cho mục đã chọn với "activatedBackgroundIndicator" Ngăn điều hướng

Đây là bộ chuyển đổi của tôi:

mDrawerListView.setAdapter(new ArrayAdapter<String>(
      // First parameter - Context 
      getActionBar().getThemedContext(), 
      // Second parameter - Layout for the row 
      R.layout.fragment_navigation_drawer_list_item, 
      // Third parameter - ID of the TextView to which the data is written 
      android.R.id.text1, 
      // Forth - the Array of data 
      new String[]{ 
        getString(R.string.title_section1), 
        getString(R.string.title_section2), 
        getString(R.string.title_section3), 
        getString(R.string.title_section4), 
      })); 
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 

Bối cảnh ở đây xuất phát từ "đã làm chín sơ" ngăn điều hướng ở Android Studio. Tôi nghĩ đây sẽ là câu trả lời Navigation Drawer item background colour for selected item. Vì vậy, tôi đã thay đổi ngữ cảnh của mình thành getActivity().getBaseContext(),, nhưng điều đó không thay đổi bất cứ điều gì.

chủ đề của tôi (styles.xml):

<resources> 
    <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> 
     <!-- API 14 theme customizations can go here. --> 
     <item name="android:actionBarStyle">@style/ActionBar</item> 
    </style> 

    <!-- Navigation Drawer styling --> 
    <style name="NavDrawerItemSelected" parent="AppBaseTheme"> 
     <item name="android:activatedBackgroundIndicator">@drawable/activated_background</item> 
    </style> 
</resources> 

activated_background trong dir 'drawables':

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true" android:drawable="@color/green" /> 
    <item android:state_selected="true" android:drawable="@color/green" /> 
    <item android:state_pressed="true" android:drawable="@color/green" /> 
    <item android:state_checked="true" android:drawable="@color/green" />   
    <item android:drawable="@android:color/transparent" /> 
</selector> 

Tôi không biết mà những quốc gia trên là nghĩa vụ phải được sử dụng, vì vậy tôi đã thêm tất cả chúng tôi có thể tìm thấy.
Cuối cùng, khi một mục được chọn mDrawerListView.setItemChecked(position, true); được gọi.
Mọi thứ đều hoạt động, ngoại trừ kiểu chủ đề tùy chỉnh. (min API = 11, thử nghiệm trên API 17 AVD)

Trả lời

24

Tôi đã gặp sự cố chính xác này. Vấn đề là nền của R.layout.fragment_navigation_drawer_list_item là những gì cần phải được thay đổi để drawable của bạn. Chỉ cần thêm android:background="@drawable/activated_background" vào bố cục.

+0

Cảm ơn! Tôi không thể tin rằng tôi đã không đi qua đó trong câu trả lời khác. Trước đây tôi đã có 'android: background =? Android: activatedBackgroundIndicator'. – Flash

+0

CUỐI CÙNG! cảm ơn .. –

+1

đây là câu trả lời đơn giản và rõ ràng nhất cho câu hỏi này về SO. – u2tall

9

tôi đã không thể tìm thấy bất kỳ câu trả lời đầy đủ rõ ràng cho câu hỏi này, vì vậy ở đây là:

Bước 1. Xác định mục danh sách bố trí adapter của bạn sẽ sử dụng, trong ví dụ này, chúng tôi đang xác định: R.layout.fragment_navigation_drawer_list_item

giống như vậy:

mDrawerListView.setAdapter(new ArrayAdapter<String>(
     // First parameter - Context 
     getActionBar().getThemedContext(), 
     // Second parameter - Layout for the row 
     R.layout.fragment_navigation_drawer_list_item, 
     // Third parameter - ID of the TextView to which the data is written 
     android.R.id.text1, 
     // Forth - the Array of data 
     new String[]{ 
       getString(R.string.title_section1), 
       getString(R.string.title_section2), 
       getString(R.string.title_section3), 
       getString(R.string.title_section4), 
     }))` 

Bước 2. Tạo và tùy chỉnh fragment_navigation_drawer_list_item.xml để xác định đối tượng vẽ được rằng sẽ có một chọn như vậy: android:background="@drawable/activated_background" Full dụ:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:gravity="center_vertical" 
    android:paddingStart="?android:attr/listPreferredItemPaddingStart" 
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall" 
    android:background="@drawable/activated_background" /> 

Bước 3. Tạo và tùy chỉnh bộ chọn trong tập tin activated_background.xml của bạn giống như trong câu hỏi, nó sẽ giống như thế này:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true" android:drawable="@color/green" /> 
    <item android:state_selected="true" android:drawable="@color/green" /> 
    <item android:state_pressed="true" android:drawable="@color/green" /> 
    <item android:state_checked="true" android:drawable="@color/green" /> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 
Các vấn đề liên quan