2011-06-16 64 views
1

我的佈局:我可以讓一個ListView項目具有不同的文本顏色嗎?

<?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的原因。我搜索了互聯網和這個網站,但我沒有看到這個問題。

那麼有可能嗎?

回答

3

是的,一切皆有可能。你需要編寫你自己的適配器實現,基本上覆蓋適配器中的getView方法。搜索谷歌和堆棧,你會發現許多關於如何編寫適配器的教程。

+0

太棒了!謝謝。我知道我不是唯一面臨這個問題的人。 – user802023 2011-06-16 18:18:45

0

下面是一個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()方法(該方法着眼於對數據加載一個布爾集)。此方法用於打開或關閉部分佈局的可見性。

或者,您可以根據相同的概念加載全新的佈局。

2

編寫一個特殊的適配器來覆蓋getView中簡單的適配器是更改文本顏色交替在您選擇的行在列表視圖中的方式。我拿了這個網站上多次重複的例子,並添加了一種方法來改變文本的顏色。位置mod長度以選擇顏色位置可以用您喜歡的任何方案替換。文本視圖「業務」可以是我的佈局的第一行 - 或者使用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。

相關問題