Android中加载数据时可以在ActionBar上显示一个无限转动的进度圈,称为IndeterminateProgressBar。可以简单通过以下方式实现。
在Activity的onCreate方法中调用
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); //使用ActionBarSherlock适配2.x系统时Window类应为com.actionbarsherlock.view.Window
开始加载数据时调用
setProgressBarIndeterminateVisibility(true); //使用ActionBarSherlock适配2.x系统时调用setSupportProgressBarIndeterminateVisibility(true);
数据加载完成时调用
setProgressBarIndeterminateVisibility(false); //使用ActionBarSherlock适配2.x系统时调用setSupportProgressBarIndeterminateVisibility(false);
但是默认的情况下出来的进度圈有点大(见下图)。这时候就需要自定义这个IndeterminateProgressBar的样式。
1. 对4.0以上的系统,可以在styles.xml中自定义ActionBar indeterminateProgresss的样式如下。
<style name="Theme.App" parent="android:style/Theme.Holo.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/Widget.App.ActionBar</item> </style> <style name="Widget.App.ActionBar" parent="android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item> </style> <style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar.Small"/>
2. 如果是使用了AnctionBarSherlock来适配2.x系统时,需要将上面的style声明到values-v14中。然后在values中作如下定义。
<style name="Theme.App" parent="Theme.Sherlock.Light.DarkActionBar"> <item name="actionBarStyle">@style/Widget.App.ActionBar</item> </style> <style name="Widget.App.ActionBar" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse"> <item name="background">@drawable/navbar_bg</item> <item name="backgroundSplit">@drawable/navbar_bg</item> <item name="indeterminateProgressStyle">@style/IndeterminateProgress</item> </style> <style name="IndeterminateProgress" parent="@style/Widget.Sherlock.ProgressBar"> <item name="android:indeterminateDrawable">@drawable/progress_small_holo</item> <item name="android:minWidth">16dip</item> <item name="android:maxWidth">16dip</item> <item name="android:minHeight">16dip</item> <item name="android:maxHeight">16dip</item> <item name="android:gravity">center</item> </style>
注意上面IndeterminateProgress的定义不同。由于2.x系统中没有Widget.ProgressBar.Small这个Style,我们需要自己实现一个这样的Style。网上不少文章介绍说可以用ActionBarSherlock的@drawable/progress_small_holo作为ActionBar的indeterminateDrawable。但实际上目前最新版的ActionBar中不包含这个drawable。于是我们对v14 style定义中的Widget.ProgressBar.Small进行分析发现,他是由一个自定义的Drawable实现的。于是可以仿照他的实现为2.x系统实现一个小个一点的进度圈。如上的@drawable/progress_small_holo是一个drawable,定义如下(两个drawable图片,可以从sdk的4.0以上版本的resource中找到)
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <rotate android:drawable="@drawable/spinner_16_outer_holo" android:fillAfter="true" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="2000"/> </item> <item> <rotate android:drawable="@drawable/spinner_16_inner_holo" android:fillAfter="true" android:fromDegrees="1440" android:pivotX="50%" android:pivotY="50%" android:toDegrees="0"/> </item> </layer-list>
这样便大功告成了(见下图)。看上去是不是比那个大圈更和谐一点?
3. 上面的例子中values-v14中ActionBar继承自Android4.0原生的主题风格。如果我们同时使用了ActionBarSherlock。并且在optionsMenu中用到了searchView, 由于ActionBarSherlock要求我们在optionsMenu使用searchView时需要使用com.actionbarsherlock.widget.SearchView。如果v-14的主题继承自原生主题,我们就无法从optionsMenu中得到searchView,因为原生的ActionBar使用的是系统的android.Widget.SearchView。这时我们需要在v-14的style中也将主题从ActionBarSherlock的主题继承。并且indeterminateProgressStyle也要声明为自定义的类型。
相关推荐
包括2个代码例子,一个是自定义 actionbar 适合用于3.0以下版本也需要使用actionbar。一个例子是 修改actionbar style样式,如果替换背景等。
Android 实现自定义ActionBar(仿qq)
Android自定义ActionBar,常用的样式
Android自定义ActionBar示例。 用法参考: http://blog.csdn.net/zircon_1973/article/details/7680404
自定义actionbar,定义一个actionbar模板,以便在程序中所有的activity中都能引用
自定义ActionBar样式, title居中。
仿Youku主页面 自定义ActionBar
android中自定义actionbar的源码,详情地址:http://blog.csdn.net/zhong1113/article/details/46332563
自定义ActionBar使标题居中显示,博客链接:http://blog.csdn.net/tan313/article/details/45039677
主要介绍了Android自定义ActionBar的实现方法,以实例形式较为详细的分析了自定义ActionBar的原理与具体步骤,并附带完整实例代码供大家下载查看,需要的朋友可以参考下
自定义actionbar源码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
安卓自定义ActionBar,通过配置Style文件试actionBAr的样式变化
本例中主要是如何创建自定义的 ActionBar。 观察上图的,当切换界面时,每个界面的顶部最多只有两个图标,而且有4个界面具有类似特性。所以可以考虑通过自定义控件来创建UI模板。 由于是需要创建出具有重用功能的...
附件里的项目自定义了ActionBar和日历控件,日历控件参照网络上的资料
适用于BaseActivity中实现自定义ActionBar,有良好的扩展性
自定义 ActionBar 的实现,其他类不需要添加任何布局和代码,只需要继承只我们实现的抽象类,即可实现我们想要的任何 ActionBar 风格
自定义的Actionbar,例子应该来说还是比较好理解的
实现了ActionBar自定义样式效果,项目内含:源码+ 效果图+项目结构图 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9087941