Reputation: 8408
Is it possible to change the colour of the text for my list view items programmatically to a hex colour using the 'if position' method? Below is the code I am currently using for the main activity and the if positions here are for navigating to other activities and so I would like to know what in my code needs to be added or modified as necessary. Also if I set theme of a app to Holo Dark for example, will it always say like that and would it be impossible for those who buy my app to tamper with the app's theme?
public class MainActivity extends Activity {
ListView mainList;
String[] listContent = {
"Line 1", "Line 2"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainList = (ListView)findViewById(R.id.main_listView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listContent);
mainList.setAdapter(adapter);
mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
//When clicked, go to specific activity
if(position == 0) {
//code specific to first list item
Intent myIntent = new Intent(view.getContext(), Line1Activity.class);
startActivityForResult(myIntent, 0);
}
if(position == 1) {
//code specific to second list item
Intent myIntent = new Intent(view.getContext(), Line1Activity.class);
startActivityForResult(myIntent, 0);
}
});
}
Upvotes: 0
Views: 1113
Reputation: 1521
I would use a custom ArrayAdapter
which sets the color based on position in getView
Something like
MainActivity.java
public class MainActivity extends Activity {
ListView mainList;
String[] listContent = {
"Line 1", "Line 2", "Line 3", "Line 4"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainList = (ListView)findViewById(R.id.main_listView);
MyColoringAdapter adapter = new MyColoringAdapter(this,listContent);
mainList.setAdapter(adapter);
mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
//When clicked, go to specific activity
Toast.makeText(getApplicationContext(),"Clicked on list item "+position,Toast.LENGTH_SHORT).show();
switch (position) {
case 0:
//code specific to first list item
break;
case 1:
//code specific to second list item
break;
}
}
});
}
private class MyColoringAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public MyColoringAdapter(Context context, String[] values) {
super(context, R.layout.list_item, values);
this.context = context;
this.values = values;
}
@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.list_item, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.list_textview);
// Set text
textView.setText(values[position]);
// Set color depending on position
int textColorId = R.color.black; // Default color
switch (position%2) {
case 0:
// Even places
textColorId = R.color.red; break;
case 1:
// Odd places
textColorId = R.color.green; break;
}
textView.setTextColor(getResources().getColor(textColorId));
return rowView;
}
}
}
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/list_textview" />
</LinearLayout>
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#ff0000</color>
<color name="green">#00ff00</color>
<color name="black">#000000</color>
</resources>
Upvotes: 1