我想在ActionBar内放置一个不确定的进度条(使用ActionBarSherlock)。一切正常,但我希望它成为小的进度条。我使用以下样式:
<style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar.Small">
<item name="android:progressBarPadding">32dp</item>
<item name="progressBarPadding">32dp</item>
<item name="android:itemPadding">32dp</item>
<item name="itemPadding">32dp</item>
</style>
<style name="Widget.Styled.ActionBar.Tiles" parent="Widget.Sherlock.Light.ActionBar">
<item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item>
<item name="android:progressBarPadding">32dp</item>
<item name="progressBarPadding">32dp</item>
<item name="android:itemPadding">32dp</item>
<item name="itemPadding">32dp</item>
</style>
问题是我无法在进度条上设置填充。如您在上面看到的,我已经尝试了itemPadding
和progressBarPadding
等的所有可能组合。
结果总是相同的:
有什么想法吗?
我找到了一个可行的解决方案,该方法如何设置不确定的进度条和适当的大小和填充。我的解决方案不使用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中的以下两项资产:
为什么对Honeycomb-和ICS +使用不同的资产?因为如果我仅使用Holo素材资源,则在某些使用Honeycomb-的设备上,动画会有点抓紧。
提示:您可以将另一个带有动画的项目添加到layer_list_ab_indeterminate_progress_bar.xml。例如,标准Holo进度栏使用2个方向相反且度数范围不同的动画。请参阅SDK中的progress_medium_holo.xml。/ res / drawable-mdpi / ab_indeterminate_progress_bar.png:<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9lNUdDVy5wbmcifQ==” alt =“在此处输入图像描述”>/ res / drawable-mdpi-v14 / ab_indeterminate_progress_bar.png(在此页面上几乎看不到):
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9UNngySC5wbmcifQ==” alt =“在此处输入图像描述”>“ >>
/ res / drawable-hdpi / ab_indeterminate_progress_bar.png:
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9FZGpRVS5wbmcifQ==” alt =“在此处输入图像描述”>
/ res / drawable-hdpi-v14 / ab_indeterminate_progress_bar.png(在此页面上几乎看不到):
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9IVEhKZS5wbmcifQ==” alt =“在此处输入图像描述”>
/ res / drawable-xhdpi / ab_indeterminate_progress_bar.png:
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9LdUdNNy5wbmcifQ==” alt =“在此处输入图像描述”>
/ res / drawable-xhdpi-v14 / ab_indeterminate_progress_bar.png(在此页面上很难看到):
“ >>
我不知道确切的答案,但是这些设置对我有用。。
<style name="Widget.MyTheme.ActionBar" parent="Widget.Sherlock.ActionBar">
<item name="indeterminateProgressStyle">?android:attr/progressBarStyleSmallInverse</item>
</style>
这些设置对我有用。如果您有任何疑问,请告诉我。
关于Parvaz Bhaskar
EDIT2:由于我尝试了不同的方法,所以最终使用?android:attr / progressBarStyleSmallInverse作为style.xml中的唯一属性,后来我将它的Spinner xml中的样式为style =“?indeterminateProgressStyle”
编辑:保留menuItem的引用,每当要显示刷新进度条时,请使用setActionView(R.layout.your_layout),并在需要时将其更改为null。 onCreateOptionsMenu将是在开始时获取menuItem的好地方。我今天见到这个并找到
Android 3/4 +]的解决方案>