【问题标题】:Android: Changing color of text in list viewAndroid:更改列表视图中的文本颜色
【发布时间】:2014-09-03 18:33:05
【问题描述】:

我正在使用一个导航抽屉菜单,其中的列表视图是膨胀的。我基本上使用的是 Eclipse 提供的内置导航抽屉。

以下代码 sn -p 显示列表视图。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    mDrawerListView = (ListView) inflater.inflate(
            R.layout.fragment_navigation_drawer, container, false);
    mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            selectItem(position);
        }
    });
    mDrawerListView.setAdapter(new ArrayAdapter<String>(
            getActionBar().getThemedContext(),
            android.R.layout.simple_list_item_1,
            android.R.id.text1,
            new String[]{
            getString(R.string.title_section1),
            getString(R.string.title_section2),
            getString(R.string.title_section3),getString(R.string.title_section4),
            getString(R.string.title_section5),
            getString(R.string.title_section6)})); 
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
    return mDrawerListView;
  }

我想更改列表项的文本颜色。 现在到目前为止,我已经尝试创建单独的 xml 文件,然后甚至通过将“android.R.id.text1”替换为“R.layout.my_layout”或“R.id.mytext_id”来尝试使用适配器,但是更改没有生效。 欢迎提出建议。

【问题讨论】:

  • 我可能会创建一个自定义适配器(继承 ArrayAdapter 或 BaseAdapter)并处理在 getView 方法中切换文本颜色。
  • 你试过textview.setTextColor(Color.RED);textview.setTextColor(Color.argb(0,200,0,0));
  • @SagarP 我无法接受。我在这里没有使用单独的 textview 变量
  • @ariets 你能举个例子吗?

标签: android android-listview android-arrayadapter textview


【解决方案1】:

正如我在上面的评论中所说,处理这个问题的一个选项是继承 ArrayAdapter 或 BaseAdapter。下面是一个例子(我选择继承 BaseAdapter):

static class ViewHolder {
    TextView tv;
}
private class CustomAdapter extends BaseAdapter{

    private ArrayList<String> items;
    private Context context;

    private int selectedPosition;

    public CustomAdapter(Context context, ArrayList<String> items){
        this.items = items;
        this.context = context;
    }

    @Override
    public int getCount() {
        return items != null ? items.size() : 0;
    }

    @Override
    public Object getItem(int i) {
        return items != null ? items.get(i) : null;
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup container) {
        ViewHolder holder = null;
        if(convertView == null){
            // You should create your own custom layout for the listview cell.
            convertView = LayoutInflater.from(context).inflate(R.layout.your_custom_row_layout);
            holder = new ViewHolder();
            holder.tv = convertView.findViewById(R.id.your_textview);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }

        String item = items.get(position);

        if(position == selectedPosition){
            // Here you set the selected text color
            holder.tv.setTextColor(Color.RED);
        }else{
            holder.tv.setTextColor(Color.BLACK);
        }

        return convertView;
    }
}

然后,在您的 Activity 中,您创建一个 CustomAdapter 实例并将其设置在 ListView 上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    相关资源
    最近更新 更多