indeterminateProgressBar在动作条造型 - 填充问题(indeterminat

2019-07-22 02:28发布

我想提出一个不确定的进度条我动作条中(使用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等。

结果总是相同的:

有任何想法吗?

Answer 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图标仍然具有48像素,但其内容(光广场)小(28px)。 您可以轻松地调整内容是这样的:第一变“图像大小”,以28px X 28px,然后更改“画布大小”回到48像素X 48像素。 我调整spinner_48_outer_holo.png 0.75。 您可以下载下面的资产。

为什么我用了蜂窝状和ICS +不同的资产? 因为如果我只用霍洛资产,动画是与蜂窝状某些设备有点断断续续。

提示:你可以用一些动画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(此页面上几乎不可见):



Answer 2:

我不知道确切的答案,但这些设置为我工作..

这是我的refresh_spinner.xml

    <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center">
<ProgressBar android:layout_width="32dp"
 android:layout_height="32dp"
 android:layout_gravity="center"
 android:layout_marginRight="12dp"
 android:layout_marginLeft="12dp"
 style="?indeterminateProgressStyle" />
    </FrameLayout>

而这在相应的XML样式

<style name="Widget.MyTheme.ActionBar" parent="Widget.Sherlock.ActionBar">
    <item name="indeterminateProgressStyle">?android:attr/progressBarStyleSmallInverse</item>
</style>

这些设置为我工作。 请让我知道如果您有任何疑问。

问候Parvaz巴斯卡尔

EDIT2:因为我是在尝试不同的方法,我最终采用了android:?“?indeterminateProgressStyle” ATTR / progressBarStyleSmallInverse在我style.xml这是我后来refrenced它从我的微调下的XML风格样式的唯一属性=

编辑:保持你的菜单项的参考,只要你想显示刷新进度使用setActionView(R.layout.your_layout),并将其更改为空的时候,需要结束。 onCreateOptionsMenu会抢在菜单项开始的好地方。



Answer 3:

我今天这个见面,找到Android 3.0的解决方案/ 4 +

ProgressBar mProgressBarInActionBar = null;
Resources res = Resources.getSystem();
int id = res.getIdentifier("progress_circular", "id", "android");
View internal = findViewById(id);
if(internal != null && internal instanceof ProgressBar){
    mProgressBarInActionBar = (ProgressBar)internal;
}
mProgressBarInActionBar.setPadding(0, 0, right, 0);

设置一个合适的 :)



Answer 4:

我有同样的问题,我发现一个简单的答案:

<style name="ActionBarProgressBar.MyStyle" parent="@android:style/Widget.Holo.ProgressBar.Large">
        <item name="android:minWidth">56dp</item>
        <item name="android:maxWidth">56dp</item>
        <item name="android:minHeight">35dp</item>
        <item name="android:maxHeight">35dp</item>
</style>

宽度是标准的动作条项宽度。 如果更改和了minHeight maxHeight,则图像将同时调整的方式。

这里是你设置不确定的进度的外观造型的ActionBar:

<style name="action_bar_theme" parent="@android:style/Widget.Holo.ActionBar">
        <item name="android:indeterminateProgressStyle">@style/ActionBarProgressBar.MyStyle</item>
</style>

而在您使用(不要忘了在你的清单使用它)的主题定义:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/action_bar_theme</item>     
</style>

干杯,保罗



文章来源: indeterminateProgressBar in ActionBar styling - padding issue