Xamawin • zam-ah win | noun
A quick, easy to implement enhancement for a Xamarin App that improves performance, appearance, or functionality
This is my go-to styles.xml for almost every Xamarin App I make. While the system default highlighting can be desirable, I find most apps look better with a custom/branded highlight or (more often) no highlight at all. Assuming the latter, I usually address the issue like so:
<?xml version="1.0" encoding="utf-8" ?> <resources> <!-- Colors --> <color name="CustomHighlight">@android:color/transparent</color> <color name="DarkOverride">@android:color/black</color> <color name="Brand">#BE1003</color> <style name="MainTheme" parent="MainTheme.Base"> </style> <!-- Base theme applied no matter what API --> <style name="MainTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="colorPrimary">@color/Brand</item> <item name="colorPrimaryDark">@color/DarkOverride</item> <item name="colorAccent">@color/Brand</item> <item name="windowActionModeOverlay">true</item> <item name="android:datePickerDialogTheme">@style/AppCompatDialogStyle</item> <!-- Override --> <item name="android:colorPressedHighlight">@color/CustomHighlight</item> <item name="android:colorLongPressedHighlight">@color/CustomHighlight</item> <item name="android:colorFocusedHighlight">@color/CustomHighlight</item> <item name="android:colorActivatedHighlight">@color/CustomHighlight</item> <item name="android:activatedBackgroundIndicator">@color/CustomHighlight</item> <!--<item name="android:textColorHint">#C14242</item>--> </style> <style name="AppCompatDialogStyle" parent="Theme.AppCompat.Light.Dialog"> <item name="colorAccent">@color/Brand</item> </style> </resources>
Also, since we are removing the highlight, it may make sense to clear out the selected value from the list so that the user may re-select the same entry in the row if needed. There are a few ways to achieve this, but assuming that clicking an entry causes a page navigation, you may use something like the following block to clear out their selection when they return to the view:
protected override void OnAppearing() { base.OnAppearing(); MyListView.SelectedItem = null; }
I’m missing an easy way to do this in iOS without a custom renderer. If you’ve got a snippet handy, let me know in the comments!