我正在使用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活动来采用我的主题?
答案 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主题而不是支持库继承colorPrimary
和colorPrimaryDark
属性。
测试此方法的一种简单方法是修改您的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);