ActionBar样式中的indeterminateProgressBar - 填充问题

Mic*_*ł K 14 android actionbarsherlock android-actionbar

我想在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>
Run Code Online (Sandbox Code Playgroud)

问题是我无法在进度条上设置填充.正如你可以在上面看到,我试过的每一个可能的组合itemPaddingprogressBarPadding

结果总是一样的: 在此输入图像描述

有任何想法吗?

pet*_*ejl 10

我找到了一个有效的解决方案,如何设置具有适当大小和填充的不确定进度条.我的解决方案不使用setActionView()的变通方法.它是内置进度条功能的解决方案,由本机操作栏(ActionBarSherlock)支持.通过setProgressBarIndeterminateVisibility(boolean)方法启用/禁用进度条.我在Android 2,3,4和ldpi,mdpi,xhdpi上测试了它.

结果

AndroidManifest.xml中:

<application
    ...
    android:theme="@style/Theme.Example">
Run Code Online (Sandbox Code Playgroud)

/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>
Run Code Online (Sandbox Code Playgroud)

/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>
Run Code Online (Sandbox Code Playgroud)

/res/values/dimens.xml:

<dimen name="ab_indeterminate_progress_bar_size">48dp</dimen>
Run Code Online (Sandbox Code Playgroud)

最后我创建了进度条资产.我使用Android SDK中的这两个资源:

  • 适用于Honeycomb和更早版本的 /sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png
  • 适用于ICS及更新版的 /sdk/platforms/android-18/data/res/mdpi/spinner_48_outer_holo.png

要获得适当的大小和填充,我们需要调整资产的大小.我将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.例如,标准Holo进度条使用2个具有相反方向和不同度数范围的动画.请参阅SDK中的progress_medium_holo.xml.

/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(在此页面上几乎看不到):

在此输入图像描述