PlacePicker没有选择材料主题

时间:2015-04-19 17:29:51

标签: android google-play-services google-places-api android-theme

我正在使用Google Play服务中的PlacePicker库来启动新活动。新活动/选择器有一个工具栏(操作栏),默认情况下没有设置样式。

PlacePicker文档说明了

  

如果使用材质主题在应用程序中设置自定义颜色,   地方选择器继承了colorPrimary和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宣言文件中使用

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

placepicker由以下代码创建:

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

但是,工具栏没有设置样式。和以前一样,它有白色背景和黑色文字。 有趣的是,我自己的工具栏(动作栏)确实有样式。

如何强制使用placepicker活动来采用我的主题?

3 个答案:

答案 0 :(得分:7)

这是开发团队的acknowledged issue

  

目前存在设置自定义主题颜色的已知问题   PlacePicker。现在你可以通过定义两个来解决这个问题   颜色名称&#34;主要&#34;和&#34; primary_dark&#34; - 这些将是   应用于PlacePicker。

     

不幸的是,在主题上设置primary / primaryDark属性会   此刻不会影响PlacePicker样式。

编辑: 似乎现在要修复。

  

这应该在Google Play Services 10.0中修复。放置选择器和   自动完成窗口小部件将使用colorPrimary和colorPrimaryDark   您应用中的颜色。

答案 1 :(得分:2)

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

  

如果使用材质主题在应用程序中设置自定义颜色,   地方选择器继承了colorPrimary和colorPrimaryDark   来自主题的属性。

但是,您尚未在Theme.Material.Light文件中指定实际材料主题(style.xml);相反,你已经使用Theme.AppCompat.Light,虽然它的设计与Material主题相同,但它是一个支持库,旨在为Material 2.1提供向后兼容性,一直到Android 2.1(API 7) 。我的猜测是PlacePicker库只会从真正的Material主题而不是支持库继承colorPrimarycolorPrimaryDark属性。

测试此方法的一种简单方法是修改您的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时可用,因此,如果这样可行,那么您将仅限于使用Lollipop的设备。

最后,作为旁注,Theme.AppCompat支持库不使用android:命名空间,因此您的原始style.xml文件可以缩短如下:

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

答案 2 :(得分:1)

  

修复问题工具栏主题android Place Picker在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);