首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

自定义ActionBar的indeterminateProgress式样

2013-08-23 
自定义ActionBar的indeterminateProgress样式requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRES

自定义ActionBar的indeterminateProgress样式
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的样式。


自定义ActionBar的indeterminateProgress式样
?

?

?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>

?

?

这样便大功告成了(见下图)。看上去是不是比那个大圈更和谐一点?

?

自定义ActionBar的indeterminateProgress式样

?


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也要声明为自定义的类型。

?

热点排行