在创建后立即在导航抽屉中设置粗体文本(在任何选择之前)

时间:2014-01-24 13:27:28

标签: android navigation-drawer

我有一个类似谷歌应用程序(播放音乐,播放电影等)的导航抽屉。

一切都很好;我唯一的问题是:在创建抽屉之后以及任何选择或点击完成之前,我无法弄清楚如何将文字设置为 BOLD
执行onItemClick后我没有问题设置粗体,但是在创建抽屉后如何做到这一点? 我试图从抽屉里面的列表中获取View引用,但它不起作用。

有人可以帮助我吗?

这是我的导航抽屉代码

        mNavDrawerStrings = getResources().getStringArray(R.array.action_bar_list);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_navigation_drawer);

    // Set the adapter for the list view
    mDrawerList.setAdapter(new ArrayAdapter<String>(this,
            R.layout.navigation_drawer_list_item, mNavDrawerStrings));

    mDrawerList.setItemChecked(0, true);
    mDrawerList.setSelection(0);

    NavigationDrawerItemClickListener navDrawerClickListener
        = new NavigationDrawerItemClickListener(this, mDrawerList, mDrawerLayout); 

    mDrawerList.setOnItemClickListener(navDrawerClickListener);

    // enable ActionBar app icon to behave as action to toggle nav drawer
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    mDrawerLayout.setDrawerShadow
        (R.drawable.drawer_shadow, GravityCompat.START);

    mDrawerToggle = new CustomActionBarDrawerToggle(this, mDrawerLayout);
    mDrawerLayout.setDrawerListener(mDrawerToggle);

2 个答案:

答案 0 :(得分:13)

您需要保留选择内容,以便所选项目在屏幕外显示后仍保持选中状态。要更改文字颜色和项目背景,您可以使用颜色/可绘制状态列表资源 http://developer.android.com/guide/topics/resources/color-list-resource.html

但是,如果您想要做更多的事情,则需要提供自定义适配器。像这样:

public class MyArrayAdapter extends ArrayAdapter<String>{

    private int selectedItem;

    public MyArrayAdapter(Context context, int resource, String[] objects) {
        super(context, resource, objects);
    }

    public void selectItem(int selectedItem){
        this.selectedItem = selectedItem;
        notifyDataSetChanged();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = super.getView(position, convertView, parent);
        ((TextView)convertView).setTypeface(null, position == selectedItem ? Typeface.BOLD : Typeface.NORMAL);

        return convertView;
    }
}

并在onItemClick()中:

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long arg3) {
    ((MyArrayAdapter)adapterView.getAdapter()).selectItem(position);
}

答案 1 :(得分:1)

非常简单,你可以在ListView的 onItemSelected方法上执行此操作。只需使用这段代码就可以使文本变粗。

public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
View rowView = view
TextView tv = (TextView) rowView.findViewById(R.id.label);
tv.setTypeface(null, Typeface.BOLD);
}});