i have a list View in my app (this is the xml layout):
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/arrayList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textFilterEnabled="true"
android:scrollbars="vertical"
android:drawSelectorOnTop="true">
</ListView>
Each item of my list View is composed of two TextView:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_container"
android:padding="5px" android:layout_height="wrap_content"
android:background="@color/white" android:shrinkColumns="0">
<TableRow>
<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_below="@+id/
description"
android:id="@+id/description"
android:textColor="@color/black"
android:scrollHorizontally="true"
android:singleLine="true"></TextView>
</TableRow>
<TableRow>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/result"
android:textColor="@color/grey"
android:maxLines="1"
android:scrollHorizontally="true"></TextView>
</TableRow>
</TableLayout>
I'm populating my listView from an ArrayAdapter, in this way:
public class Matches extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//set layout
setContentView(R.layout.list_layout);
// obtain reference to listview
ListView listView = (ListView) findViewById(R.id.arrayList);
ArrayAdapter<Match> arrayAdapter = new ArrayAdapter<Match>(
this, R.layout.custom_row, R.id.description, createItems()) {
@Override
public View getView (int position, View convertView, ViewGroup parent){
Match item = getItem (position);
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.custom_row, null);
TextView description = (TextView)rowView.findViewById(R.id.description);
TextView result = (TextView)rowView.findViewById(R.id.result);
description.setText(item.description + " Risultato: " + item.result );
result.setText(item.date + " " + item.hour);
return rowView;
}
};
listView.setAdapter(arrayAdapter);
My goal is to be able to change the text color and the backgorund of these child views whenever the parent is selected or pressed.
How can i do it?
If you want to change the default button color without losing the shadow, Then I recommend changing the style of the required button. now change the colorAccent to the desired color in the color. xml located under res->values->colors. xml file.
The child views in your list row should be considered selected whenever the parent row is selected, so you should be able to just set a normal state drawable/color-list on the views you want to change, no messy Java code necessary. See this SO post.
Specifically, you'd set the textColor
of your textViews to an XML resource like this one:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@color/black" /> <!-- focused -->
<item android:state_focused="true" android:state_pressed="true" android:drawable="@color/black" /> <!-- focused and pressed-->
<item android:state_pressed="true" android:drawable="@color/green" /> <!-- pressed -->
<item android:drawable="@color/black" /> <!-- default -->
</selector>
In your main.xml include the following in your ListView:
android:drawSelectorOnTop="false"
android:listSelector="@android:color/darker_gray"
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@drawable/YOUR DRAWABLE XML" />
<item android:drawable="@drawable/YOUR DRAWABLE XML" />
</selector>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With