Ответ 1
Я нашел рабочее решение, как установить неопределенный индикатор выполнения с правильным размером и дополнением. Мое решение не использует обходное решение с setActionView(). Это решение для встроенных функций индикатора выполнения, поддерживаемых встроенной панелью действий (ActionBarSherlock). Индикатор выполнения активирован/отключен с помощью метода setProgressBarIndeterminateVisibility (boolean). Я тестировал его на Android 2, 3, 4 и ldpi, mdpi, xhdpi.
AndroidManifest.xml:
<application
...
android:theme="@style/Theme.Example">
/res/values/styles.xml:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
...
<style name="Theme.Example" parent="Theme.Sherlock">
<item name="actionBarStyle">@style/Example.ActionBar</item>
<item name="android:actionBarStyle">@style/Example.ActionBar</item>
</style>
<style name="Example.ActionBar" parent="Widget.Sherlock.ActionBar">
<item name="indeterminateProgressStyle">@style/Example.ActionBar.IndeterminateProgressBar</item>
<item name="android:indeterminateProgressStyle">@style/Example.ActionBar.IndeterminateProgressBar</item>
</style>
<style name="Example.ActionBar.IndeterminateProgressBar" parent="@android:style/Widget.ProgressBar.Large.Inverse">
<item name="android:indeterminateDrawable">@drawable/layer_list_ab_indeterminate_progress_bar</item>
<item name="android:minWidth">@dimen/ab_indeterminate_progress_bar_size</item>
<item name="android:maxWidth">@dimen/ab_indeterminate_progress_bar_size</item>
<item name="android:minHeight">@dimen/ab_indeterminate_progress_bar_size</item>
<item name="android:maxHeight">@dimen/ab_indeterminate_progress_bar_size</item>
</style>
</resources>
/res/drawable/layer_list_ab_indeterminate_progress_bar.xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<!--
/res/drawable-mdpi/ab_indeterminate_progress_bar asset is taken from
/sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png
and its content (optical square) is resized to ~0.6 (must be even number)
/res/drawable-mdpi-v14/ab_indeterminate_progress_bar asset is taken from
/sdk/platforms/android-18/data/res/mdpi/spinner_48_outer_holo.png
and its content (optical square) is resized to 0.75
-->
<rotate
android:drawable="@drawable/ab_indeterminate_progress_bar"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="360" />
</item>
</layer-list>
/res/values/dimens.xml:
<dimen name="ab_indeterminate_progress_bar_size">48dp</dimen>
Наконец, я создал активацию промежуточных баров. Я использовал эти два актива из Android SDK:
- /sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png для сотовых и старых
- /sdk/platforms/android-18/data/res/mdpi/spinner_48_outer_holo.png для ICS и более новых
Чтобы получить правильный размер и дополнение, нам нужно изменить размер активов. Я изменил размер spinner_white_48.png на ~ 0.6. Для mdpi это было 28px. Это должно быть четное число, которое будет центрально-симметричным. Я изменил только содержимое, а не весь значок. Таким образом, значок в mdpi имеет 48px, но его содержимое (оптический квадрат) меньше (28px). Вы можете легко изменить размер содержимого таким образом: сначала измените размер изображения на 28px X 28px, затем измените размер "холста" на 48px X 48px. Я изменил размер spinner_48_outer_holo.png на 0,75. Вы можете загрузить перечисленные ниже ресурсы.
Почему я использую разные активы для Honeycomb- и ICS +? Потому что, если я использую только активы Holo, анимация немного разрывается на некоторых устройствах с Honeycomb -.
Совет. Вы можете добавить еще один элемент с некоторой анимацией в layer_list_ab_indeterminate_progress_bar.xml. Например, стандартный индикатор прогресса Холо использует 2 анимации в противоположном направлении и в разных градусах. См. Progress_medium_holo.xml в SDK.
/res/drawable-mdpi/ab_indeterminate_progress_bar.png:
/res/drawable-mdpi-v14/ab_indeterminate_progress_bar.png(почти не видно на этой странице):
/res/drawable-hdpi/ab_indeterminate_progress_bar.png:
/res/drawable-hdpi-v14/ab_indeterminate_progress_bar.png(почти не видно на этой странице):
/res/drawable-xhdpi/ab_indeterminate_progress_bar.png:
/res/drawable-xhdpi-v14/ab_indeterminate_progress_bar.png(почти не видно на этой странице):