我想提出一个不确定的进度条我动作条中(使用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中这两项资产:
- /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(此页面上几乎不可见):
我不知道确切的答案,但这些设置为我工作..
这是我的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会抢在菜单项开始的好地方。
我今天这个见面,找到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);
设置一个合适的吧 :)
我有同样的问题,我发现一个简单的答案:
<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>
干杯,保罗