【问题标题】:Can I make one ListView item have a different Text Color?我可以让一个 ListView 项目具有不同的文本颜色吗?
【发布时间】:2011-06-16 18:04:49
【问题描述】:

我有布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ListView
    android:id="@+id/ListView01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1.0"
    android:textColor="@android:color/white"
    android:dividerHeight="1px"
    android:listSelector="@drawable/highlight_sel"
    />
</LinearLayout>

还有代码:

private ListView lv1;
private String lv_arr[]={"Item 1","Item 2","Item 3","Item 4"};

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newsmenu);

    lv1=(ListView)findViewById(R.id.ListView01);
    // By using setAdpater method in listview we an add string array in list.
    lv1.setAdapter(
       new ArrayAdapter<String>(this,
                                android.R.layout.simple_list_item_1,
                                lv_arr));
}

我希望项目 2(或 1 或 3 或 4)的文本颜色动态显示为红色(表示新项目)或白色(默认)。有没有办法做到这一点?

我已经有一个选择器,这就是我使用 ListView 的原因。我搜索了互联网和这个网站,但我没有看到有人提出过这个问题。

那么有可能吗?

【问题讨论】:

    标签: android listview


    【解决方案1】:

    是的,一切皆有可能。您需要编写自己的适配器实现,基本上覆盖适配器中的 getView 方法。搜索 google 和 stack 你会发现很多关于如何编写适配器的教程。

    【讨论】:

    • 太棒了!谢谢。我知道我不是唯一面临这个问题的人。
    【解决方案2】:

    在简单的适配器中编写一个特殊的适配器来覆盖 getView 是在列表视图中根据您选择的行交替更改文本颜色的方法。我举了这个网站上重复多次的例子,并添加了一种改变文本颜色的方法。 position mod length 选择颜色位置可以替换为您喜欢的任何方案。文本视图“业务”可以像我一样是布局的第一行——或者使用 android.R.id.text1。

    public class SpecialAdapter extends SimpleAdapter {
    private int[] colors = new int[] { 0x30FF0000, 0x300000FF };
    
    public SpecialAdapter(Context context, List<HashMap<String, String>> items, int resource, String[] from, int[] to) {
        super(context, items, resource, from, to);
    }
    
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      View view = super.getView(position, convertView, parent);
      int colorPos = position % colors.length;
      //view.setBackgroundColor(colors[colorPos]); //old example
      TextView tv1 = (TextView)view.findViewById(R.id.business); //new
      tv1.setTextColor(colors[colorPos]); //new
      return view;
    }
    }
    

    只需在您的应用中使用 SpecialAdapter 而不是 SimpleAdapter。

    【讨论】:

      【解决方案3】:

      以下是 getView 方法的示例。请注意,它使用查看器来提高效率。如果你想了解更多,请告诉我。

      public View getView(int position, View convertView, ViewGroup parent) {
      
          tempDeal = exampleBoxArrayList.get(position);
      
          ViewHolder holder;
      
          if (convertView == null) {
              convertView = inflator.inflate(R.layout.list_item_example_box, null);
              holder = new ViewHolder();
              holder.divider = (RelativeLayout) convertView.findViewById(R.id.example_box_divider);
              holder.merchantName = (TextView) convertView.findViewById(R.id.example_box_merchant_name);
              holder.expireDate = (TextView) convertView.findViewById(R.id.example_box_expire_date);
              holder.description = (TextView) convertView.findViewById(R.id.example_box_description);
      
              convertView.setTag(holder);
          } else {
              holder = (ViewHolder) convertView.getTag();
      
          }
      
          if (tempDeal.isDivider()) {
              holder.divider.setVisibility(View.VISIBLE);
          } else {
              holder.divider.setVisibility(View.GONE);
          }
      
          holder.merchantName.setText(tempDeal.getMerchantName());
          holder.expireDate.setText(tempDeal.getExpiryDateString());
          holder.description.setText(tempDeal.getPriceOption().getDescription());
      
          return convertView;
      
      }
      

      如您所见,我在自定义对象上调用了isDivider() 方法(此方法查看数据加载时的布尔集)。此方法用于打开或关闭部分布局的可见性。

      或者,您可以加载基于相同概念的全新布局。

      【讨论】:

        猜你喜欢
        • 2012-02-23
        • 2014-05-11
        • 2022-01-22
        • 2011-03-24
        • 2011-12-26
        • 2012-08-15
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多