Znalazłem roztwór roboczy Jak ustawić poprzeczkę nieokreślony postępu z odpowiedniej wielkości i padding. Moje rozwiązanie nie używa obejścia z funkcją setActionView(). Jest to rozwiązanie dla wbudowanej funkcji paska postępu, obsługiwanej przez natywny pasek działań (ActionBarSherlock). Pasek postępu jest włączony/wyłączony za pomocą metody setProgressBarIndeterminateVisibility (boolean). Testowałem to na systemach Android 2, 3, 4 i 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>
końcu stworzyłem aktywa pasku postępu.Kiedyś te dwa aktywa z Android SDK:
- /sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png dla Honeycomb i starszych
- /sdk/platform/android-18 /data/res/mdpi/spinner_48_outer_holo.png dla ICS i nowszych
aby uzyskać właściwego rozmiaru i wyściółkę, musimy zmienić wielkość aktywów. Zmieniłem rozmiar: spinner_white_48.png na ~ 0.6. Dla mdpi miało to 28 pikseli. Musi być parzysta, aby być centralnie symetryczną. Zmieniłem rozmiar tylko treści, a nie całej ikony. Zatem ikona w mdpi ma nadal 48 pikseli, ale jej zawartość (kwadrat optyczny) jest mniejsza (28 pikseli). Możesz w prosty sposób zmienić rozmiar treści: najpierw zmień "rozmiar obrazu" na 28px X 28px, a następnie zmień "rozmiar płótna" na 48px X 48px. Zmieniłem rozmiar: spinner_48_outer_holo.png na 0.75. Możesz pobrać poniższe zasoby.
Dlaczego używam różnych zasobów w przypadku architektury Honeycomb i ICS +? Ponieważ jeśli używam tylko zasobów Holo, animacja jest trochę wyskokowa na niektórych urządzeniach z Honeycomb-.
Wskazówka: możesz dodać kolejny element z pewną animacją do layer_list_ab_indeterminate_progress_bar.xml. Na przykład standardowy pasek postępu Holo wykorzystuje 2 animacje z przeciwnymi kierunkami i różnymi zakresami stopni. Zobacz progress_medium_holo.xml w SDK.
/res/drawable-mdpi/ab_indeterminate_progress_bar.png:
/res/drawable-mdpi-v14/ab_indeterminate_progress_bar.png (ledwo widoczne na tej stronie):
/res/drawable-hdpi/ab_indeterminate_progress_bar.png:
/res/drawable-hdpi-v14/ab_indeterminate_progress_bar.png (ledwo widoczne na tej stronie):
/res/drawable-xhdpi/ab_indeterminate_progress_bar.png:
/res/drawable-xhdpi-v14/ab_indeterminate_progress_bar.png (ledwie widoczne na tej stronie):
Czy naprawdę nie ma sposobu, aby to zrobić bez tworzenia niestandardowych projektów i zmieniania rozmiaru zasobów? Pożądany efekt można uzyskać prawie przez ustawienie 'minWidth',' minHeight', 'maxWidth',' maxHeight' w stylu, o którym wspomniałeś, ale 'ProgressBar' pojawia się w samym rogu (bez ikony menu z przepełnionymi trzema kropkami to wygląda okropnie). Ustawienie 'padding',' layout_margin' w stylu nie ma żadnego wpływu. Czemu! czemu!!?? – janakagamini