PlacePicker不拾取材质主题

我正在使用来自Google Play服务的PlacePicker库,该库启动了一项新的活动。 新的活动/select器有一个工具栏(操作栏),默认情况下不是样式的。

PlacePicker文档指出

如果使用材质主题在应用程序中设置自定义颜色,则位置选取器将从主题inheritancecolorPrimary和colorPrimaryDark属性。

我在我的style.xml文件中有一个主题:

<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> 

我已经设置了在我的Android Manifesto文件中使用的主题

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

placepicker是由以下代码创build的:

 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."); } 

但是,工具栏没有风格。 像以前一样,它有一个白色的背景和黑色的文字。 有趣的是,我自己的工具栏(操作栏)确实是风格化的。

我如何强制地点select器活动采用我的主题?

Solutions Collecting From Web of "PlacePicker不拾取材质主题"

这是开发团队公认的问题 。

目前在PlacePicker上设置自定义主题颜色时存在已知问题。 现在你可以通过定义两个名字为“primary”和“primary_dark”的颜色来解决这个问题 – 这些将被应用到PlacePicker。

不幸的是,在主题上设置主要/主要地点属性不会影响目前的PlacePicker样式。

编辑:似乎是现在修复。

这应该在Google Play服务10.0中解决。 放置选取器和自动完成小部件将使用您应用中的colorPrimary和colorPrimaryDark颜色。

正如您在问题中提供的文档中所述:

如果使用材质主题在应用程序中设置自定义颜色,则位置选取器将从主题inheritancecolorPrimary和colorPrimaryDark属性。

但是,您尚未在style.xml文件中指定实际的材质主题( Theme.Material.Light ) 相反,您已经使用了Theme.AppCompat.Light ,它被devise为与Material主题相同的外观和操作,是一个支持库,旨在为Android 2.1(API 7)提供对Material主题的向后兼容性, 。 我的猜测是, PlacePicker库只从真实的Material主题inheritancecolorPrimarycolorPrimaryDark属性,而不是支持库。

一个简单的方法来testing这将是修改您的style.xml文件使用真正的材质主题,看看是否可行:

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

唯一的缺点是Material主题只能在API≥21中使用,所以,如果这样做,那么你将被限制在仅使用棒棒糖的设备。

最后,作为旁注, Theme.AppCompat支持库不使用android:命名空间,所以你原来的style.xml文件可以缩短为:

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

解决问题的工具栏主题android Place Pick在OS下的棒棒糖

 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);