导航抽屉中的选定项目

5
我在我的应用程序中实现了导航抽屉(http://developer.android.com/training/implementing-navigation/nav-drawer.html)。
我如何更改当前选定项的显示方式?我希望所选项以粗体和不同的颜色显示。
在官方示例中,他们使用“setItemChecked”,但是我如何修改单个已检查项目的外观?“setOnItemSelectedListener”方法无效。
到目前为止,当我打开一个片段时,我会执行以下代码:
for (int i = 0; i < mDrawerList.getChildCount(); i++){
    TextView t = (TextView) mDrawerList.getChildAt(i);

    if(i == fragmentPosition) t.setTextColor(getResources().getColor(R.color.blue));
    else t.setTextColor(getResources().getColor(R.color.black));
}

它是有效的,但在应用程序启动时,没有选择任何项目,并且我无法设置任何项目,因为listview尚未创建(我认为它会在我们第一次打开它时创建)。 我尝试创建一个选择器,但不知道如何正确设置不同的属性(项目已选中,项目已选择,项目已单击?),搜索了文档但是我不理解。 感谢您能够提供的任何帮助!
2个回答

4

我会在适配器中完成它。

mAdapter.setSelectedItem(position);

public View getView(...) {
    ...
    if (position == mSelectedItem) {
        text.setTypeface(...);
        text.setBackgroundColor(...);
    } else {
        text.setTypeface(...);
        text.setBackgroundColor(...);
    }
}

如果您不需要设置字体,则可以使用选择器来

setTextColor(@drawable/my_selector).

或者将它放在你的xml文件中的TextView标签里。
android:textColor="@drawable/my_selector"

1
这是我改变导航抽屉中所选项目的颜色和字体的解决方案...
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
     setNavDrawerItemNormal();
     TextView txtview = ((TextView) view.findViewById(R.id.txtNav));
     txtview.setTypeface(null, Typeface.BOLD);
     txtview.setTextColor(R.color.Red);
}

public void setNavDrawerItemNormal()
{
    for (int i=0; i< mDrawerListView.getChildCount(); i++)
    {
        View v = mDrawerListView.getChildAt(i);
        TextView txtview = ((TextView) v.findViewById(R.id.txtNav));
        Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Light.ttf");
        txtview.setTypeface(font);
        txtview.setTextColor(R.color.Red);
    }
}

为了在应用程序初始化时加粗导航抽屉中的第一项,我在列表适配器的getView方法中完成了这个操作...
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.navdrawer_item, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.txtNav);
    textView.setText(values[position]);
    if (position == 0) 
    { 
       textView.setTypeface(null, Typeface.BOLD);
       textView.setTextColor(R.color.Red);
    }

    return rowView;
}

所以,在这里我检查了项目的位置是否为0(意味着它是第一个项目),然后将其加粗。整个过程对我来说完美无缺!~

这是一个不好的hack!它会误导人们。请使用CheckedTextView!同时,使用myDrawerListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE) - Dmitry Gryazin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接