8

我正在使用来自Google Play服务的PlacePicker图库启动新活动。新的活动/选择器有一个工具栏(操作栏),默认情况下它不是样式。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> 

,我已经设置了主题

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

的placepicker通过创建我的Android宣言文件中使用以下代码:

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

但是,工具b ar没有风格。和以前一样,它有一个白色的背景和黑色的文字。 有趣的是我注意到我自己的工具栏(操作栏)的样式。

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

+0

下是做什么用的发射活动的造型? – ianhanniballake

+0

@ianhanniballake一个主题适用于整个应用程序,所以我会接受所有基础活动应该是相同的主题。 –

+0

因此,只需确认,您在启动“PlacePicker”的活动中没有“android:theme”?你还可以包含你用来创建'PlacePicker'的代码吗? – ianhanniballake

回答

7

这是一个acknowledged issue开发团队。

目前在PlacePicker上设置自定义主题颜色 时存在已知问题。现在,您可以通过定义两个名称为“主”和“primary_dark”的 颜色来解决此问题 - 这些将应用于PlacePicker的 。

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

编辑: 似乎现在修复。

这应该在Google Play Services 10.0中解决。 Place Picker和 Autocomplete Widget将使用您的应用中的colorPrimary和colorPrimaryDark 颜色。

+0

您是否找到改变标题文字颜色的方法? – Max

+0

@最大否(希望他们很快就能修复) –

+1

您知道如何在环聊中获得搜索选项吗? https ://www.evernote.com/shard/s526/sh/34204375-b79d-4cce-81cb-e569294d42b8/32d08a49b980b45b153fb478d0e2bf3e – Max

2

正如你在你的问题中提供的文件中提到:

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

但是,你有没有在你的style.xml文件中指定的实际材料主题(Theme.Material.Light);相反,您已经使用了Theme.AppCompat.Light,尽管它的设计与Material主题相同,但它是一个支持库,旨在为Android 2.1(API 7)提供对Material主题的向后兼容性。我的猜测是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> 

当然,唯一的缺点是材料主题只适用于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> 
+0

设置原生材质设计的颜色对我无效。 :( –

+2

Android。其中设置颜色是火箭sciene – Arthur

0

要解决问题的工具栏主题的Android将选择器上的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);