PlacePicker не поднимает материальную тему

Я использую библиотеку PlacePicker из Google Play Services, которая запускает новое мероприятие. В новом упражнении/сборщике есть панель инструментов (панель действий), которая по умолчанию не указана.

Документация PlacePicker гласит, что

Если вы устанавливаете пользовательские цвета в своем приложении, используя материальную тему, выбор места наследует цветPrimary и colorPrimaryDark атрибуты из темы.

У меня есть тема в файле style.xml:

и я установил тему, которая будет использоваться в моем файле манифеста Android

Создатель 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 ответа

Это признанная проблема командой разработчиков.

В настоящее время существует известная проблема с настройкой пользовательских цветов тем PlacePicker. Пока вы можете обойти это, указав два цвета с именами "primary" и "primary_dark" - это будут применяется к PlacePicker.

К сожалению, настройка свойства primary/primaryDark на тему будет не влияют на стиль PlacePicker в данный момент.

EDIT: Кажется, теперь исправлено.

Это должно быть исправлено в Google Play Services 10.0. Место Picker и Autocomplete Widget будет использовать цветPrimary и colorPrimaryDark цвета из вашего приложения.


Как указано в документации, которую вы указали в своем вопросе:

Если вы устанавливаете пользовательские цвета в своем приложении, используя материальную тему, выбор места наследует цветPrimary и colorPrimaryDark атрибуты из темы.

Однако вы не указали тему actual Material (Theme.Material.Light) в вашем файле style.xml; скорее, вы использовали Theme.AppCompat.Light, который, будучи разработанным для того, чтобы смотреть и работать так же, как тема "Материал" , представляет собой библиотеку поддержки, предназначенную для обеспечения обратной совместимости для темы "Материал" до Android 2.1 (API 7). Я предполагаю, что библиотека PlacePicker наследует атрибуты colorPrimary и colorPrimaryDark от темы "Материал материала", а не библиотеки поддержки.

Простым способом протестировать это будет изменение вашего файла style.xml для использования темы "Материал материала" и посмотреть, работает ли это:

Единственный недостаток, конечно, в том, что тема "Материал" доступна только в API ≥ 21, поэтому, если это работает, тогда вы будете ограничены устройствами, использующими только Lollipop.

Наконец, в качестве опоры библиотеки поддержки Theme.AppCompat не используют пространство имен android:, поэтому исходный файл style.xml можно сократить следующим образом:


Чтобы исправить проблемы на панели инструментов темы 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);

licensed under cc by-sa 3.0 with attribution.