1

Могу ли я узнать, как изменить цвет текста выбранного элемента в навигационном ящике.Навигационный ящик выбранного пункта textColor by Custom Adapter

андроид: TextColor для ListView не работает после установки appcompat_v7 22.1.1 , так что я думаю, что я не могу изменить, с помощью селектора вытяжки.

Мне удается изменить цвет элементов ящика по умолчанию с помощью пользовательского адаптера.

Но при инициализации это может только установить первый элемент в зеленый.

Могу ли я узнать, как изменить цвет выбранных элементов (onclick) на цвет, который я хочу, когда элемент выбран.

адаптер:

public class NavigationDrawerAdapter extends ArrayAdapter<String> { 
    private int mSelectedItem; 
    private final Context context; 
    private String[] sections; 

    public NavigationDrawerAdapter(Context context, int resource, String[] objects) { 
     super(context, resource, objects); 
     this.context = context; 
     sections = objects; 
    } 
    public int getSelectedItem() { 
     return mSelectedItem; 
    } 
    public void setSelectedItem(int selectedItem) { 
     mSelectedItem = selectedItem; 
    } 

    private String getMenuItemTitle(int position) { 
     if (position >= 0 && position <= sections.length) 
      return sections[position]; 
     return "Invalid section requested"; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     //Get item TextView 
     TextView view = (TextView) super.getView(position, convertView, parent); 

     view.setText(getMenuItemTitle(position)); 

     if (position == mSelectedItem) { 
      view.setTextColor(getContext().getResources().getColor(R.color.green)); 
     } else { 
      view.setTextColor(getContext().getResources().getColor(R.color.white));  } 
     return view; 
    } 
} 

Навигация ящик:

mDrawerListView.setAdapter(new NavigationDrawerAdapter(
       getActionBar().getThemedContext(), 
       android.R.layout.simple_list_item_activated_1, 
       new String[]{ 
         getString(R.string.title_home), 
         getString(R.string.title_stamp), 
         getString(R.string.title_scanner), 
         getString(R.string.title_setting),}) { 

     }); 
     mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 
     return mDrawerListView; 
.. 
... 
private void selectItem(int position) { 
     mCurrentSelectedPosition = position; 

     if (mDrawerListView != null) { 
      mDrawerListView.setItemChecked(position, true); 
     } 
     if (mDrawerLayout != null) { 
      mDrawerLayout.closeDrawer(mFragmentContainerView); 
     } 
     if (mCallbacks != null) { 
      mCallbacks.onNavigationDrawerItemSelected(position); 
     } 
    } 

ответ

3

я нашел решение.

Так как у меня есть удлинитель. Мне просто нужно вызвать и изменить выбранный элемент по позиции, когда элемент щелкнул, чтобы внести изменения.

ListDrawer onItemClickListener:

mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       selectItem(position); 

       myadapter.setSelectedItem(position); 

      } 

И от пользовательского адаптера:

public void setSelectedItem(int selectedItem) { 
     mSelectedItem = selectedItem; 
    } 

    private String getMenuItemTitle(int position) { 
     if (position >= 0 && position <= sections.length) 
      return sections[position]; 
     return "Invalid section requested"; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     //Get item TextView 
     TextView view = (TextView) super.getView(position, convertView, parent); 

     view.setText(getMenuItemTitle(position)); 

     if (position == mSelectedItem) { 
      view.setTextColor(getContext().getResources().getColor(R.color.green)); 
     } else { 
      view.setTextColor(getContext().getResources().getColor(R.color.normal)); 
     } 

     return view; 
    } 

* адаптер класса на вопрос.

источник: samsaodev.com

1
final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // Do something after some time 
      for (int i = 0; i < recyclerViewDrawer1.getChildCount(); i++) { 
       ImageView imageViewDrawerItemIcon = (ImageView) recyclerViewDrawer1 
         .getChildAt(i).findViewById(
           R.id.imageViewDrawerItemIcon); 
       TextView textViewDrawerItemTitle = (TextView) recyclerViewDrawer1 
         .getChildAt(i).findViewById(
           R.id.textViewDrawerItemTitle); 
       LinearLayout linearLayoutItem = (LinearLayout) recyclerViewDrawer1 
         .getChildAt(i).findViewById(R.id.linearLayoutItem); 
       if (i == 0) { 
        imageViewDrawerItemIcon.setColorFilter(colorPrimary); 

        textViewDrawerItemTitle.setTextColor(colorPrimary); 
        linearLayoutItem 
          .setBackgroundColor(colorControlHighlight); 
       } else { 
        imageViewDrawerItemIcon 
          .setColorFilter(textColorPrimary); 

        textViewDrawerItemTitle.setTextColor(textColorPrimary); 
        linearLayoutItem.setBackgroundColor(colorBackground); 
       } 
      } 
     } 
    }, 250); 
2

Вместо анализа всех элементов вашей панели навигации, просто создать Color State Список ресурсы See documentation here

drawer_text_selector.xml в вашем Реза/цвет папки

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_activated="false" 
    android:color="@color/drawer_text_normal"/> 
    <item 
    android:state_pressed="true" 
    android:color="@color/drawer_text_pressed"/> 
    <item 
    android:state_activated="true" 
    android:color="@color/drawer_text_pressed"/> 
</selector> 

Затем в элементе списка ящика установите textColor вашего TextView на:

<TextView 
    android:id="@+id/drawerText" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="@color/drawer_text_selector" />