Тема Spinner на панели действий правильно отображается в эмуляторе, но неправильно на телефоне

У меня проблема, когда счетчик, который я использую, правильно отображается в эмуляторе, но неправильно на телефоне.

Лучше всего это можно проиллюстрировать на этом снимке экрана, сделанном с телефона (обратите внимание на светло-серый фон за словами «Приоритеты приложений 1»):

Неверная тема счетчика отображается на телефоне

Вот как это должно выглядеть (взято из эмулятора). Здесь текст белый, а фон черный, как и должно быть.

Правильная тема счетчика отображается на эмуляторе

Я не уверен, что это все соответствующие части кода, но у меня есть папка с именем values-v14, которая содержит один файл с именем styles.xml. Содержимое файла:

<resources>
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />
</resources>

Это вращающийся XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="fill_horizontal"
android:orientation="vertical" >

<TextView  
    android:id="@android:id/text1"
    style="?android:attr/spinnerItemStyle"      
    android:singleLine="true"
    android:layout_width="150dip"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:textAppearance="?android:attr/textAppearanceMedium"
 />

</RelativeLayout>

Я не уверен, актуален ли манифест, но у меня там есть это: android:minSdkVersion="15" android:targetSdkVersion="15"

Пробовал установить версию 14, ничего не изменилось.

ОБНОВЛЕНИЕ: после добавления android:theme="@style/AppTheme" в манифест и эмулятор, и телефон ведут себя одинаково. Панель действий теперь темная, как и должна быть. Но у всех списков белый фон!

Теперь цвета списков неверны!


person Eugene van der Merwe    schedule 21.09.2012    source источник
comment
У Samsung есть неприятная привычка переопределять темы по умолчанию, такие как Theme.Holo, с их пользовательским интерфейсом TouchWiz и делать их совершенно отличными от любого другого телефона. Вот почему ваш Spinner выглядит иначе на телефоне. Если у вас есть другое устройство, на котором вы можете протестировать его, я бы рекомендовал использовать его. Кроме того, вам следует изучить что-то под названием Holo Everywhere, чтобы темы Holo по умолчанию работали должным образом на устройствах, которые переопределяют их.   -  person Michael Celey    schedule 21.09.2012
comment
@MCeley The Holo themes must not be modified in order to pass CTS. github.com/android/platform_frameworks_base /blob/master/core/ Хотя Samsung может добавлять свои собственные темы (и использовать их по умолчанию), они не могут изменять темы Holo. Таким образом, любой разработчик, указывающий тему Holo в своем манифесте, может быть уверен, что она одинакова на всех устройствах, сертифицированных CTS (требуется для получения приложений Google и Google Play).   -  person smith324    schedule 01.07.2013


Ответы (2)


Измените AppTheme на Theme.Holo вместо Theme.Holo.Light.DarkActionBar, и вы вернете свой темный фон.

Theme.Holo.Light.DarkActionBar такой же, как Theme.Holo.Light (все светлое), только, как вы уже догадались, более темный ActionBar.

person Michael Celey    schedule 21.09.2012
comment
Большое спасибо, это сработало. Все очень запутанно, но тем не менее! - person Eugene van der Merwe; 21.09.2012
comment
У скинов производителей есть замечательный способ сделать темы более сложными. Рад, что вы смогли решить эту проблему. - person Michael Celey; 21.09.2012

Я предполагаю, что телефон имеет версию Android 2.x для Android, тогда как эмулятор использует Android 3+. Это означает, что в эмуляторе есть тема Holo, а в телефоне — нет. Вы должны либо создать свою собственную тему, копирующую тему Holo, либо смириться с тем фактом, что она будет выглядеть по-разному на разных версиях Android. Определенно требуется больше работы, чтобы убедиться, что он по-прежнему хорошо выглядит во всех версиях, но это также приводит к более плавному взаимодействию.

person CaseyB    schedule 21.09.2012
comment
Настройки/О программе на эмуляторе показывает Android версии 4.04, а на телефоне показывает версию 4.0.3. Я погуглю инструкции о том, как скопировать тему Holo. - person Eugene van der Merwe; 21.09.2012
comment
Это Samsung Galaxy 3. Ваш ответ и этот пост ссылка помогает мне добраться куда-то. После добавления android:theme="@style/AppTheme" в манифест теперь и эмулятор, и телефон имеют согласованные, хотя и неправильные отображения. Панель действий правильная, но все списки имеют белый фон! Я загружаю изображение сейчас к вопросу. - person Eugene van der Merwe; 21.09.2012
comment
Как выглядит ваш файл AppTheme? - person CaseyB; 21.09.2012
comment
Спасибо @CaseB за ваш ответ, он выглядел так <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />, но теперь выглядит так <style name="AppTheme" parent="android:Theme.Holo" />, и это работает! - person Eugene van der Merwe; 21.09.2012