Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PlacePicker doesn't pick up material theme

I am using a PlacePicker library from Google Play Services which starts up a new activity. The new activity/picker has a toolbar (actionbar) which is not styled by default.

PlacePicker documentation states that

If you set custom colors in your application using the material theme, the place picker inherits the colorPrimary and colorPrimaryDark attributes from the theme.

I have a theme in my style.xml file:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">#5665bb</item>
    <item name="android:colorPrimary">#5665bb</item>
    <item name="colorPrimaryDark">#41456b</item>
    <item name="android:colorPrimaryDark">#41456b</item>
</style>

and I have set the theme to be used in my Android Manifesto file

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

The placepicker is created by the following code:

try {
    PlacePicker.IntentBuilder intentBuilder = new PlacePicker.IntentBuilder();
    Intent intent = intentBuilder.build(Main.this);
    // Start the intent by requesting a result,
    // identified by a request code.
    startActivityForResult(intent, REQUEST_PLACE_PICKER);
} catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) {
    Log.e("", "Error with Google Play lib.");
}

However, the toolbar doesn't get styled. As before it has a white background and black text. It's interesting to note that my own toolbar (actionbar) does get styled.

How do I force the placepicker activity to adopt my theme?

like image 318
Arturs Vancans Avatar asked Apr 19 '15 17:04

Arturs Vancans


3 Answers

This is an acknowledged issue by the development team.

There is currently a known issue with setting custom theme colors on the PlacePicker. For now you can work around this by defining two colors with the names "primary" and "primary_dark" - these will be applied to the PlacePicker.

Unfortunately setting the primary/primaryDark property on a theme will not affect the PlacePicker styling at the moment.

EDIT: Seems to be fixed now.

This should be fixed in Google Play Services 10.0. Place Picker and Autocomplete Widget will use the colorPrimary and colorPrimaryDark colors from your app.

like image 127
Arturs Vancans Avatar answered Sep 28 '22 03:09

Arturs Vancans


As is mentioned in the documentation that you provided in your question:

If you set custom colors in your application using the material theme, the place picker inherits the colorPrimary and colorPrimaryDark attributes from the theme.

However, you have not specified the actual Material theme (Theme.Material.Light) in your style.xml file; rather, you have utilized Theme.AppCompat.Light which, while it is designed to look and operate the same as the Material theme, is a support library designed to provide backward compatability for the Material theme all the way to Android 2.1 (API 7). My guess would be that the PlacePicker library only inherits the colorPrimary and colorPrimaryDark attributes from the true Material theme and not the support library.

An easy way to test this would be to modify your style.xml file to use the real Material theme and see if this works:

<style name="AppTheme" parent="android:Theme.Material">
    <item name="android:colorPrimary">#5665bb</item>
    <item name="android:colorPrimaryDark">#41456b</item>
</style>

The only drawback of course is that the Material theme is only available in API ≥ 21, so, if this works, then you would be restricted to devices that utilize Lollipop only.

Lastly, as a sidenote, the Theme.AppCompat support libraries do not use the android: namespace, so your original style.xml file can be shortened as follows:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">#5665bb</item>
    <item name="colorPrimaryDark">#41456b</item>
</style>
like image 29
Willis Avatar answered Sep 28 '22 04:09

Willis


To fix issues toolbar theme android Place Picker on OS under Lollipop

PlacePicker.IntentBuilder intentBuilder = new PlacePicker.IntentBuilder(); 
Intent intent = intentBuilder.build(getActivity()); 
    // if Build version sdk is under Lollipop, add intent extra
    (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        intent.putExtra("primary_color", getResources().getColor(R.color.colorPrimary));
        intent.putExtra("primary_color_dark", getResources().getColor(R.color.colorPrimaryDark));
    }

//start intent
startActivityForResult(intent, REQUEST_PLACE_PICKER_CODE);
like image 38
Anoop M Maddasseri Avatar answered Sep 28 '22 04:09

Anoop M Maddasseri