Как применить тему Android HoloEverywhere при использовании ActionBarSherlock?

Я создаю приложение, которое должно работать на Android 2.3, и я добавил библиотеки ActionBarSherlock и HoloEverywhere.

Чтобы использовать ActionBarSherlock, я должен использовать Theme.Sherlock примерно так:

<application
    ...
    android:theme="@style/Theme.Sherlock"
    ...  >

И это нормально.

Моя основная деятельность довольно проста: просто ListView с 5 строками (я не использую ListAcctivity).

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/menuListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

Так как это Android 2.3, у меня все еще есть оранжево-черная тема (за исключением ActionBar, конечно). Теперь я хочу добавить тему HoloEverywhere, изменив мой манифест следующим образом:

<application
    ...
    android:theme="@style/Theme.HoloEverywhereDark.Sherlock"
    ...  >

НО это ничего не меняет... Чего мне не хватает?

3 ответа

Решение

Чтобы включить тему Holo по умолчанию для каждого ListView, я зашел в файл styles.xml библиотеки HoloEverywhere, а затем изменил элемент "ListViewStyle", добавив следующую строку:

<item name="android:listSelector">@drawable/list_selector_holo_dark</item>

У меня была та же проблема с селектором ListView. Я думал, что HoloEveruwhere будет применять селектор holo (синий) по умолчанию (я пробовал оба Theme.HoloEverywhereLight и Theme.HoloEverywhereLight), но это не так. Может быть, я что-то упустил.

Я закончил настройку селектора вручную:

listView.setSelector(R.drawable.list_selector_holo_light);

У вас есть несколько доступных для рисования ресурсов в библиотеке, которые вы можете использовать (например, list_selector_holo_light).

Переносимым и правильным решением было бы наследовать от ListViewStyle и переопределить атрибут, делая это в вашем styles.xml.

Если у вас была официальная библиотека HoloEverywhere, развернутая удаленно на сервере (например, репозиторий Maven), вы не могли бы рассчитывать на то, что она внесет изменения в styles.xml (вы модифицируете ее для своих собственных нужд).