ActionBar样式中的indeterminateProgressBar-填充问题

问题描述 投票:14回答:4

我想在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>

问题是我无法在进度条上设置填充。如您在上面看到的,我已经尝试了itemPaddingprogressBarPadding等的所有可能组合。

结果总是相同的:“在此处输入图像描述”

有什么想法吗?

android android-actionbar actionbarsherlock
4个回答
10
投票

我找到了一个可行的解决方案,该方法如何设置不确定的进度条适当的大小和填充。我的解决方案不使用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的大小调整为。对于mdpi,它是28px。它必须是偶数才能中心对称。我只调整内容的大小,而不调整整个图标的大小。因此,mdpi中的图标仍为48px,但其内容(光学方块)较小(28px)。您可以通过以下方式轻松调整内容大小:首先将“图片大小”更改为28px X 28px,然后将“画布大小”更改为48px X 48px。我将spinner_48_outer_holo.png的大小调整为。您可以从下面下载资产。

    为什么对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(在此页面上很难看到):

    “在此处输入图像描述”“ >>

    我不知道确切的答案,但是这些设置对我有用。。


  • 1
    投票
    并且这在相应样式的xml中

    <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 +]的解决方案>


    1
    投票

    1
    投票
    © www.soinside.com 2019 - 2024. All rights reserved.