2015-05-15 103 views
1

我可以知道如何更改导航抽屉中选定项目的文本颜色。自定义适配器导航抽屉选定项目textColor

机器人:文字颜色为列表视图不工作后安装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

,而不是分析你的抽屉式导航栏的所有项目,只需创建一个颜色列表资源See documentation here

drawer_text_selector.xml在RES /彩色文件夹

<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> 

然后在您的抽屉列表项中将TextView的textColor设置为:

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