- 浏览: 236509 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (70)
- Spring (5)
- J2EE (5)
- Android (21)
- JavaSe (12)
- JmagicK (1)
- Eclipse (3)
- 重构 (1)
- Struts2 (2)
- 项目经验 (2)
- UML (1)
- 设计模式 (3)
- TDD (1)
- 极限编程 (1)
- 敏捷编程 (1)
- Json (1)
- Java web (1)
- ejb (1)
- mongodb (1)
- Mylyn (1)
- git (1)
- oracle (2)
- 操作系统 (1)
- 数据结构与算法 (2)
- C (1)
- 效率参考 (1)
- Java基础 (3)
- 开源框架 (1)
- 阿里云 (2)
- linux (1)
- html5开发框架 (3)
- ios开发 (2)
- webapp (0)
- 我的创业 (1)
- Java (1)
- IDE (1)
- Java虚拟机 (2)
- 区块链 (2)
最新评论
-
BlueSkyXin:
你真的很厉害,懂得不懂得,都跟我们讲清楚了。你这才叫学知识,透 ...
Struts2值栈的理解 -
wiseyl:
第一种方法: 过滤器不太好,建议在service层时 由于se ...
hibernate+spring mvc,解决hibernate对象懒加载,json序列化失败 -
u012256814:
您好,看了您的这个教程受益不小,我就是想问问您在sha1后面加 ...
Google Map API V2 密钥申请 详细图解 -
ahau10:
OGNL表达式,context, valueStack都讲清楚 ...
Struts2值栈的理解 -
yaolan:
Struts2值栈的理解
ActonBar介绍
ActionBar取代了传统的标题栏(title),其在activity位置就是title原有的位置,在activity的顶部。ActionBar上默认情况下包括了应用(app)的logo,logo的位置在ActionBar的左侧,紧挨在logo右侧的是activity的标题(title)。在ActionBar的右侧,可以是在选项菜单(options menu)中任意一个菜单项。ActionBar提供若干有用的特性,其中包括了:
① 作为“action选项”,在ActionBar上直接显示“选项菜单”(OptionsMenu)——
为用户进行某项操作提供直接的访问;
作为“action项”没有出现在ActionBar上得菜单项会被置于“更多...”菜单项
中,在ActionBar上,“更多...”菜单项是以下拉形式实现的。
② 为在多个fragments之间切换提供标签(tabs)功能;
③ 为导航提供下拉列表;
④ 在“action项”位置提供交互式action组件,例如搜索框。
在Activity中获得ActionBar
在Android 3.0及更高的版本中,Activity中都默认包含有ActionBar组件。特别要注意的是,所有使用“holographic”主题的Activity都包含有ActionBar,并且所有Android 3.0上的应用自动接收这个主题。一个应用被认为是基于Android 3.0的标识是在AndroidManifest中的<uses-sdk>标签中设置了android:minSdkVersion或者android:targetSdkVersion属性值为11或者更大值时,此时的应用被系统认为是Android 3.0上得应用,这样就默认接受“holographic”主题,即其中的Activity包含有ActionBar。例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.helloworld"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="4"
android:targetSdkVersion="11" />
<application ... >
...
</application>
</manifest>
在这个例子中应用需求的最小的API版本号是4(Android 1.6),但同时这是了目标API版本是11(Android 3.0)。这样当这个应用程序在运行Android 3.0或者更高版本的设备上运行时,系统会在应用程序的Activity上应用“holographic”主题,这样每个Activity就都包含有ActionBar。
但是如果你想使用ActionBar的API,例如增加标签(tabs)或者改变ActionBar风格,那么你必须设置android:minSdkVersion的值为11,这样你才可以访问到ActionBar类。
取消ActionBar
如果你在某个Activity中不需要ActionBar,那么将Activity的主题设置为Theme.Holo.NoActionBar。例如:
<activity android:theme="@android:style/Theme.Holo.NoActionBar">
指导:若果在你不需要ActionBar的Activity中有自定义的Activity主题,那么设置android:windowActionBar风格属性的值为false,有关ActionBar的风格在后面会讨论到。
同样,在运行时调用hide()方法也可以隐藏ActionBar,调用show()方法来显示ActionBar()。例如:
ActionBar actionBar = getActionBar();
actionBar.hide();
当你隐藏ActionBar时,系统会将Activity的整个内容充满整个空间。
注意:如果使用一个主题(theme)来移除Activity上得ActionBar,那么窗口将不再会有ActionBar,因此在运行时也就没有办法来添加ActionBar——调用getActionBar()方法会返回null值。
增加Action Item
一个Action Item实质上仅仅是一个Options Menu菜单项,这个菜单项被声明直接在ActionBar上显示而已。一个Action Item可以包含一个图标,一个文本或者两个兼有。如果一个Acton Item没有出现在ActionBar上,那么系统会将其放置在“更多”菜单中,用户可以通过ActionBar右侧的图标打开“更多”菜单项。
当Activity首次启动时,系统会通过调用onCreateOptionsMenu()方法来将菜单项放置于ActionBar和“更多”菜单当中。就如在Menu开发指导中讲述到的一样,在这个回调方法中,我们为Activity定义选项菜单(Options Menu)。
如果要声明在ActionBar上有空间时才显示一个Action Item的话,你可以在菜单资源(menu resource)的<item>标签中设置android:showAsAction="ifRoom"来将一个菜单项声明为Action Item。这样只有当ActionBar上有空间来显示这个菜单项时,才会显示来直接进行访问(其功能)。如果ActionBar上没有足够的空间,那么Action Item会被放置于“更多”菜单项中(可以通过点击ActionBar右侧图标打开查看到菜单项)。
同样也可以通过在应用的代码中声明一个Action Item。通过调用MenuItem对象的setShowAsAction()方法,并传入SHOW_AS_ACTION_IF_ROOM参数值。
如果菜单项(options menu)包含了图标和文本,而默认情况下,Action Item只显示图标。如果你想在Action Item上同时也显示文本,需要添加“with text”标识位。在XML中,在android:showAsAction属性值上添加“withText”属性值,或者在代码中调用setShowAsAction()方法是传入SHOW_AS_ACTION_WITH_TEXT参数值。图2中显示的是ActionBar上有图标和文本的Action Item和“更多”菜单项的图标。
图2有图标和文本的菜单项及“更多”菜单项图标
如下是如何在菜单资源(menu resource)文件中将菜单项声明为Action Item的例子:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_save"
android:icon="@drawable/ic_menu_save"
android:title="@string/menu_save"
android:showAsAction="ifRoom|withText" />
</menu>
在这个例子当中,同时设置了“ifRoom”和“withText”属性值,因此,当菜单显示在ActionBar上时,会同时显示图标和文本。
在ActionBar上的菜单项和在选项菜单中(options menu)中菜单项一样会触发相同的回调方法。当用户选择一个Action Item时,Activity会接收到对onOptionsItemSelected()回调方法的调用,并且传入菜单项的ID值。
注意:如果你是在一个fragment中添加的菜单项,那么对于相应fragment的onOptionsItemSelected()方法也会被调用。但是Activity的拥有首先处理的优先权,即首先调用到Activity的onOptionsItemSelected()方法,然后再调用fragment的onOptionsItemSelected()的方法。
你也可以声明一个菜单项一直在ActionBar上显示,但是最好避免这么做,因为如果有太多的Acton Item的话会导致一个杂乱的UI,并且可能会和ActionBar上得其他元素冲突。
要知道跟多Menu内容的话,可以查看Menu开发指导。
使用应用图标作为Action Item
默认情况下,应用的图标出现在ActionBar的左侧。应用图标同样会对用户交互做出响应(当用户触碰到图标时,它会和一般的Action Item做出一样的响应),并且用户触碰到图标要做的事情就是开发者的任务了。
图3 Email的ActionBar,应用图标在左侧
当用户触及到图标时,正常的行为时应用回到其主界面,或者回到初始状态(例如,Activity没有改变,但是fragment改变了)。如果用户已经在主界面并在初始初始状态,那么你就不需要再坐什么事情。
当用户点击应用图标时,系统调用Activity的onOptionsItemSelected()方法并传入R.id.home ID值。因此,你需要在onOptionsItemSelected()方法中添加一个条件来监听R.id.home并作出一个合适的响应,例如返回主界面或者弹出最近的fragment业务。
如果你以返回应用主界面来相应用户点击,那么你需要在Intent中包含FALG_ACTIVITY_CLEAR_TOP。使用这个标志位,当你要启动的Activity在当前的task中已经存在时,在该Activity(在堆栈中)上面的其他Activity都被销毁,目标Activity就显示在屏幕前面。你应该更加选择这个方法,因为返回应用主界面的行为相当于“going back”并且通常你不应该创建应用home activity的一个新实例。否则,在当前的task中你遭遇到长的Activity栈的返回结果。
例如,如下是回到应用主界面的onOptionsItemSelected()方法的实现:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in Action Bar clicked; go home
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
使用应用图标往回导航(navigate “up”)
你也可以使用应用图标为用户提供“向上”导航功能。这在你的应用由多个Activity组成时很有用,多个Activity按一定的顺序显示并且在Activity层次上为用户简化导航向上的功能(不管是怎样进入到当前的Activity)。
对这个事件的响应方式和返回应用主界面的方式一样【代码一样】(如上讨论的,除了启动一个不同的Activity之外,都是基于当前的Activity)。你所需要做的事情是设置ActionBar“向上显示主界面”(show home as up)的功能来向用户表示一种不同的行为。你可以通过调用对应Activity的ActionBar的setDisplayHomeAsUpEnabled(true)来完成此功能。当你这么做的时候,系统绘制带箭头的应用图标,如图4。
图4 标准的Email应用图标(上)和“向上”图标(下)
例如,如下是你如何来显示一个“向上”的图标:
@Override
protected void onStart() {
super.onStart();
ActionBar actionBar = this.getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
那样,你的Activity应该在onOptionsItemSelected()方法中对R.id.home ID值进行监听(如上显示)来响应用户点击应用图标。在这个例子中,对于在Intent中使用FLAG_ACTIVITY_CLEAR_TOP标识位尤其重要,以至于当一个Activity已经存在时无需再创建一个实例。
添加Action视图(Action View)
一个Action视图实际上是出现在ActionBar上的组件,它取代了在ActionBar上得Action Item。例如,如果你的选项菜单(options menu)中有“搜素”菜单,只要Action Item可用,你都可以为菜单项添加一个Action视图来提供搜索组件(SearchView)。
当为一个菜单项添加一个Action视图,菜单项没有在ActionBar上出现时,允许Action Item像一个正常的菜单项一样进行行为很重要。例如,默认情况下,执行搜索功能的菜单项(options menu)应该会产生一个Android搜索对话框,但是如果这个菜单项放到ActionBar当中,Action视图会带着SearchView组件出现在ActionBar上。图5显示了出现在ActionBar上的SearchView组件。
图5 带有SearchView组件的Action视图
声明一个Action视图最好的方式是在你的菜单资源(menu resource)当中使用android:actionLayout或者android:actionViewClass属性:
① android:actionLayout的值必须是一个布局文件的引用,例如:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
android:title="Search"
android:icon="@drawable/ic_menu_search"
android:showAsAction="ifRoom"
android:actionLayout="@layout/searchview" />
</menu>
② android:actionViewClass的值必须是你使用的视图类的完全限定名,例如:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
android:title="Search"
android:icon="@drawable/ic_menu_search"
android:showAsAction="ifRoom"
android:actionViewClass="android.widget.SearchView" />
</menu>
当有足够的空间时,为了使Action视图出现在ActionBar上,你必须按次序包括android:showAsAction="ifRoom"。但是,如果有必要,你可以设置设置android:showAsAction的值为“always”来让菜单项做为Action视图出现。
现在,当一个菜单项作为Action Item显示时,它的Action视图会出现,而不是它的图标或者/和文本。但是,如果ActionBar上没有足够的空间,Action Item像一般选项菜单一样显示在“更多”菜单项中,而且在onOptionsItemSelected()回调中对菜单事件作出回应。
当Activity首次启动的时候,系统会调用onCreateOptionsMenu()方法来创建ActionBar上得Action Item和“更多”菜单中的菜单项。当你在这个方法中创建菜单后,你可以通过菜单的ID值和findItem()方法获得MenuItem对象,然后再调用MenuItem对象的getActionView()方法在Action视图中获得相关元素(可能是为了添加监听器)。例如,像上面声明的搜索组件可以向如下的方式来进行获得:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.options, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
// Set appropriate listeners for searchView
...
return super.onCreateOptionsMenu(menu);
}
想要获得更多有关SearchView的信息,可以查看创建搜索界面的开发知道。
增加标签(tabs)
在Activity中ActionBar可以显示tabs,来使用户可以再不通的fragment之间进行切换。每个tab可以包含图标或者/和文本。
开始之前,你的布局中必须包含一个View,View当中要包含和tab相关联的需要进行显示的fragment。而且必须确保你的View有ID,以便在代码中可以被引用。
图6 ActionBar上的tab,截图是gallery实例应用
在ActionBar上增加tab:
1. 首先是创建一个队ActionBar.TabListener的实现,以便来处理tab交互时的事件。你必须实现所有的方法:onTabSeleceted(),onTabUnselected()和onTabReselected()。
每个回调都传入ActionBar.Tab对象,ActionBar.Tab对象接收事件及用来执行fragment业务的一个FragmentTransaction对象(增加或者删除fragment)。
例如:
private class MyTabListener implements ActionBar.TabListener {
private TabContentFragment mFragment;
// Called to create an instance of the listener when adding a new tab
public MyTabListener(TabContentFragment fragment) {
mFragment = fragment;
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.fragment_content, mFragment, null);
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(mFragment);
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// do nothing
}
}
这一对ActionBar.TabListener实现增加了一个构造方法,用以保存与tab相关的fragment,这样在每个回调中就可以对该fragment进行添加或者删除。
2. 在onCreate()方法中调用getActionBar()方法来获得Activity的ActionBar对象。(但是要确保在表用getActionBar()方法之前已经调用了setContentView()方法)。
3. 调用ActionBar的setNavigationMode(NAVIGATION_MODE_TABS)方法来启用其tab模式。
4. 为ActionBar创建tab
1. 在ActionBar上调用newTab()来创建一个ActionBar.Tab对象。
2. 调用setIcon()和/或者setText()方法来增加图标和/或者标题。
指点:这些方法返回的是同一个ActionBar.Tab对象,因此可以连续调用
3. 在setTabListener()方法中传入声明的ActionBar.TabListener实现对象。
5. 在ActionBar上调用addTab()并传入ActionBar.Tab来在ActionBar上增加标签。
例如,如下是进行了第2~5步在ActionBar上增加标签:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// setup Action Bar for tabs
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// remove the activity title to make space for tabs
actionBar.setDisplayShowTitleEnabled(false);
// instantiate fragment for the tab
Fragment artistsFragment = new ArtistsFragment();
// add a new tab and set its title text and tab listener
actionBar.addTab(actionBar.newTab().setText(R.string.tab_artists)
.setTabListener(new TabListener(artistsFragment)));
Fragment albumsFragment = new AlbumsFragment();
actionBar.addTab(actionBar.newTab().setText(R.string.tab_albums)
.setTabListener(new TabListener(albumsFragment)));
}
当tab被选择时所进行的行为你都要在ActionBar.TabListener的回调方法中进行定义。当一个tab被选择时,onTabSelected()方法被调用并且在此方法中可以使用提供的FragmentTransaction的add()方法在目标视图(View)中添加适合的fragment。同样地,当一个tab没有被选择(因为另一个tab被选择),你应该使用remove()方法从布局中移除fragment。
小心:对这次transaction你不必调用commit()方法——因为系统会为你调用,如果你自己调用可能会派出异常。你也不能将这些fragment transaction增加到后台栈当中。
当你的Activity stop()时,你应该保留住当前的tab和其状态以便在用户返回到应用时可以打开tab。当要保存状态时,你可以调用getSelectedNavigatonIndex()方法来访问当前被选中的tab,这个方法返回被选中的tab的索引位置。
小心:适时保存fragment的状态时很重要得事情,以为当用户在tab之间的fragment当中切换,又返回之前的fragment。要获得更多有关fragment保存状态的信息,可以查看fragment开发知道。
增加下拉导航(drop-down navigation)
作为Activity的另外一种导航模式,你可以在ActionBar上提供下拉列表。例如,下拉列表可以为Activity提供对内容进行排序或者更换账号提供选择。
如下是快速使用下拉模式的步骤:
1. 为下拉列表创建一个列表项的SpinnerAdapter和放置每个列表项的布局。
2. 实现ActionBar.OnNavigationListener来定义当列表项被选择时进行的操作。
3. 使用setNavigationMode()方法启用导航功能,例如:
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
注意:你应该在onCreate()方法中执行这段代码。
4. 然后,调用setListNavigationCallbacks()方法为下拉列表设置回调,例如:
actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback);
这个方法需要SpinnerAdapter和ActionBar.OnNavigationListener作为参数。更多内容继续往下看。
这些是基本步骤。但是大多数的工作实现的SpinnerAdapter和ActionBar.OnNavigationListener中已经做了。有许多的方式来为你的下拉列表定义功能,而对SpinnerAdapter的许多实现方式已经超出了这部分文档的说明范围(你应该参照SpinnerAdapter类来获得更多的知识)。但是,下面是对SpinnerAdapter的一种实现和ActionBar.OnNavigationListener的实现。
对SpinnerAdapter和ActionBar.OnNavigationListener的实例:
SpinnerAdapter是为spinner组件提供数据的一个适配器,例如为ActionBar上下拉列表提供数据。SpinnerAdapter是一个接口,你可以对其进行实现,但是在Android中包含若干个你可以进行扩展的接口,录入ArrayAdapter和SimpleCursorAdapter。例如,下面是使用ArrayAdapter来创建一个SpinnerAdapter的一种简单实现,它使用一个字符串数组作为数据源:
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list,android.R.layout.simple_spinner_dropdown_item);
createFromResource()方法有三个参数:应用Context,数组资源ID,每个列表项的布局。
一个定义好的字符串数组就像下面的一样:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="action_list">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
</string-array>
</resources>
createFromResource()所返回的ArrayAdapter对象就这样实现了并且可以准备好传入到setListNavigationCallbacks()方法中(像在第4步中进行的一样)。但是在你这么做之前,你应该先创建OnNavigationListener对象。
在ActionBar.OnNavigationListener的实现当中,你可以处理用户在下拉列表中选择一个列表项时产生的事件,你可以对fragment的改变进行处理或者在Activity上得其他修改。在这个监听中只有一个回调:onNavigationItemSelected()。
onNavigationItemSelected()方法中接收列表项在列表中的位置值和SpinnerAdapter提供的唯一的列表项的ID值。
下面是对OnNavigationListener的一个匿名实现,在实现当中,在R.id.fragment_container所表示的布局容器中插入fragment:
mOnNavigationListener = new OnNavigationListener() {
// Get the same strings provided for the drop-down's ArrayAdapter
String[] strings = getResources().getStringArray(R.array.action_list);
@Override
public boolean onNavigationItemSelected(int position, long itemId) {
// Create new fragment from our own Fragment class
ListContentFragment newFragment = new ListContentFragment();
FragmentTransaction ft = openFragmentTransaction();
// Replace whatever is in the fragment container with this fragment
// and give the fragment a tag name equal to the string at the position selected
ft.replace(R.id.fragment_container, newFragment, strings[position]);
// Apply changes
ft.commit();
return true;
}
};
完成了对OnNavigationListener的实现,接下来你就可以调用setListNavigationCallbacks()方法(在第4步中的操作),并且传入ArrayAdapter和OnNavigationListener。
在这个例子当中,当用户在列表中选择了一个列表项,一个fragment就被添加到了布局当中(在R.id.fragment_container中取代当前的fragment)。被添加的fragment上被给予了一个唯一定义的tag,这个tag与被用来定义下拉列表中的列表项的tag一样。
下面的例子让我们看看ListContentFragment类中定义的每个fragment:
public class ListContentFragment extends Fragment {
private String mText;
@Override
public void onAttach(Activity activity) {
// This is the first callback received; here we can set the text for
// the fragment as defined by the tag specified during the fragment transaction
super.onAttach(activity);
mText = getTag();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// This is called to define the layout for the fragment;
// we just create a TextView and set its text to be the fragment tag
TextView text = new TextView(getActivity());
text.setText(mText);
return text;
}
}
ActionBar的自定义风格
ActionBar是应用的基础也是用户进行交互的基本点,因为你有可能为了使使用户使用起来觉得与应用更加一致而修改ActionBar的设计。
要对ActionBar进行简单修改,你可以使用下面的方法:
setBackgroundDrawable():
使用一个drawable来用作ActionBar的背景。一个drawable可以是一个9.png图片,
一个形状或者一个填充颜色。这样,系统就可以根据ActionBar的大小来调整drawable
的大小(最好不要使用固定大小的图片资源)。
setDiaplayUseLogoEnabled():
在ActionBar上使用一个可选图片(比如Logo),而不是应用图标。一个logo通常
是一个更宽更清楚地代表一个应用。如果启用了这个功能,那么在AndroidManifest当
中就可以为应用(或者某个Activity)定义一个logo的图片资源,使用android:logo属
性来进行定义。Logo将为适应ActionBar的高度被适时地缩放。(作为应用logo,最好
的实际就是设计大小相同的logo)
要获得更多更复杂的自定义风格,可以查看style and theme开发指导,可以获得有集中方式来自定义ActionBar的风格。
ActionBar有两个标准的风格,“dark”和“light”。dark主题默认跟随这holographic主题被应用。如果你想要一个白底黑字风格,在Manifest当中你可以使用Theme.Holo.Light主题。例如:
<activity android:name=".ExampleActivity"
android:theme="@android:style/Theme.Holo.Light" />
对于更多的设置,你可以重写Theme.Holo或者Theme.Holo.Light主题并在ActionBar的某个方面去应用自定义风格。下面是你可以使用来进行自定义的一些属性:
android:actionBarTabStyle
定义ActionBar.Tab的风格。
android:actionBarTabBarStyle
ActionBar的tab后面的风格。
android:actionBarTabTextStyle
Tab上文字的风格。
android:actionDropDownStyle
“更多”菜单中下拉风格
android:actionButtonStyle
在ActionBar上得按钮的背景图片的风格
例如,下面是基于Theme.Holo主题的自定义风格:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBar" parent="android:style/Theme.Holo.Light">
<item name="android:actionBarTabTextStyle">@style/customActionBarTabTextStyle</item>
<item name="android:actionBarTabStyle">@style/customActionBarTabStyle</item>
<item name="android:actionBarTabBarStyle">@style/customActionBarTabBarStyle</item>
</style>
<!-- style for the tab text -->
<style name="customActionBarTabTextStyle">
<item name="android:textColor">#2966c2</item>
<item name="android:textSize">20sp</item>
<item name="android:typeface">sans</item>
</style>
<!-- style for the tabs -->
<style name="customActionBarTabStyle">
<item name="android:background">@drawable/actionbar_tab_bg</item>
<item name="android:paddingLeft">20dp</item>
<item name="android:paddingRight">20dp</item>
</style>
<!-- style for the tab bar -->
<style name="customActionBarTabBarStyle">
<item name="android:background">@drawable/actionbar_tab_bar</item>
</style>
</resources>
注意:为了基于当前的tab状态(选中,按下,不选择)来改变背景图片,drawable资源必须是state list drawable。同样,要保证你声明了一个父主题,从这个父主题是继承的,没有在现在的主题中进行显示声明。
你可以再Manifest当中对私有的Activity或者整个应用使用这个自定义个风格,例如:
<application android:theme="@style/CustomActionBar"
... />
此外,如果你想为你的Activity创建自定义主题,而你的Activity已经完全移除了ActionBar,使用下面的风格属性:
android:windowActionBar
设置这个属性值为false可以移除ActionBar
android:windowNoTitle
设置这个属性值为true,同样移除传统的标题栏
要获取更多有关在应用中使用风格和主题,可以查看Styles and Themes文档。
发表评论
-
Java实现文件加密传输和快速解密读取
2018-06-29 15:29 4299在运营某些项目时,我们可能需要使用到第三方的服务器来存储数据 ... -
Java实现文件加密传输和快速解密读取
2018-06-29 15:37 1在运营某些项目时,我们可能需要使用到第三方的服务器来存储数 ... -
Android4.4来了
2013-11-01 13:59 0Beautiful & Immersive A ... -
Android应用开机自动启动
2013-09-28 19:58 1759背景知识:当Android启动时,会发出一个系统广播,内容为 ... -
Java基础 之软引用、弱引用、虚引用
2013-09-28 19:55 1122在JDK1.2以前的版本中,当一个对象不被任何变 ... -
adb server无法启动方法,结束占用端口的进程
2013-08-05 13:38 8340adb server is out of date. ki ... -
ListViewPager,ListView分页最轻量解决方案
2013-08-05 12:41 0import java.util.concurrent.at ... -
【Android】升级ADT 22 引发的错误
2013-07-05 17:24 1044言 今天心血来潮,又把ADT升级了一下,升级到了ADT 2 ... -
Google I/O大会发布Android Studio,安装与不能运行解决
2013-05-16 15:25 20811.下载地址: https://developer.an ... -
Google I/O大会发布Android Studio,安装与不能运行解决等错误解决。
2013-05-16 15:23 1280下载地址: https://developer.andro ... -
使用Git之后出现android library引用失败
2013-04-06 00:04 5515今天在做android项目的使用,因为使用了git做代码托管 ... -
提高Android在eclipse下的编译速度
2013-04-02 15:46 3170大家都知道用eclipse安装adt来进行Android程序 ... -
android no target available 解决
2013-04-02 15:33 10422在安装最新版本的ADT之后,版本21.1.启动eclipse ... -
android学习和广告平台赚钱
2013-01-30 09:29 1704前言: 2011年11月份我开始学习andr ... -
android4.0 使用百度地图不能自动刷新问题
2013-01-21 10:38 2074百度地图,4.0以下的可以正常使用。 但是4.0的就会出 ... -
Google Map API V2 密钥申请 详细图解
2013-01-13 11:03 19515前一阵公司给配了个Mac 谁想项目运行后地图没了,怎么办 ... -
Json转换为Java对象
2012-11-04 19:56 1705package com.chinatech.common ... -
Android Query使用教程
2012-08-05 01:39 7625在android程序设计中,很多是要要实现异步任务,缓存,获取 ... -
设置Activity全屏
2012-08-05 01:27 1344*全屏 在Android下如何实现一个Activit ... -
android 拍照上传照片
2012-08-05 01:23 1359废话不多说,直接进入主题,想要在android中实现拍 ...
相关推荐
在Android应用开发中,`ActionBar`和`Fragment`是两个非常关键的组件,尤其是在3.0及以上版本。它们为开发者提供了更加丰富和灵活的界面设计能力。本实例将深入探讨这两个组件的使用方法以及如何结合它们来提升用户...
在Android应用开发中,`ActionBar`是Android ...理解并熟练运用`ActionBar`和`Fragment`切换是构建高效、可维护的Android应用的关键技能之一。通过这种方式,开发者可以创建出具有清晰导航结构的应用,提升用户体验。
在Android应用开发中,ActionBar和Fragment是两个非常重要的组件,它们极大地增强了应用的用户体验和功能。本篇文章将深入探讨如何将这两个元素结合使用,以实现类似GroupActivity或TabHost的导航效果。 首先,我们...
在Android应用开发中,ActionBar、Fragment和ViewPager是三个非常重要的组件,它们对于构建用户界面和实现复杂的导航功能具有重要作用。让我们深入探讨这三个组件及其在实际应用中的使用。 **ActionBar** ActionBar...
总的来说,`ActionBar`与`Fragment`的结合使用,能够使Android应用的界面更加丰富和互动,同时提高代码的复用性。通过熟练掌握这两者,开发者可以构建出更适应多屏幕设备且易于维护的应用程序。
在Android应用开发中,"Actionbar+动态fragment导航栏"是一个常见的设计模式,它结合了UI元素和数据的动态更新,以提供用户...通过实践这样的项目,开发者可以深入理解Android UI组件的使用和数据驱动的界面更新策略。
在Android应用开发中,`ActionBar`、`Fragment`和`ViewPager`是三个非常重要的组件,它们共同作用可以创建出功能丰富的界面布局。本教程将详细解释如何利用这些组件实现一个`TabActivity`,即带有标签切换功能的活动...
本文将详细介绍如何使用ActionBar和fragment实现页面导航的实例。 首先,我们需要了解ActionBar的概念。ActionBar是Android 3.0中引入的一种新的UI组件,用于在应用程序中提供导航和操作菜单。ActionBar可以显示...
总的来说,通过巧妙地组合使用ActionBar、ViewPager和Fragment,开发者可以构建出类似微信的多页面应用,提供流畅的用户体验。同时,为了提高代码的可复用性和可维护性,遵循良好的编程实践和设计模式也是至关重要的...
通过使用Fragment,开发者可以创建动态和灵活的布局,适应不同的设备配置和用户需求。 3. **ViewPager**:ViewPager是一个强大的滑动视图容器,允许用户在左右滑动时浏览多个页面。通常与PageIndicator(如...
Android学习路线(二十四)ActionBar Fragment运用最佳实践demo, 博客地址:http://blog.csdn.net/sweetvvck/article/details/38645297
总结来说,这个“ActionBar+Fragment”项目旨在教育开发者如何在Android应用中有效地结合使用`ActionBar`和`Fragment`。`ActionBar`提供了用户交互的主要界面,而`Fragment`则帮助构建灵活且可复用的界面组件。通过...
Fragment 和Viewpager,ActionBar运用
Fragment,ViewPager+actionBar运用
总的来说,这个文档内容涉及了Android应用开发中的基本组件和网络数据处理,展示了如何使用`ActionBar`实现标签页导航,利用`Fragment`实现动态界面,以及通过异步任务处理`JSON`数据。这在实际开发中是非常常见的...
Adapter负责在用户翻页时加载或销毁Fragment,以优化内存使用和性能。 4. **Fragment**:Fragment是Android应用中可重用的UI模块,它可以独立于Activity存在。在ViewPager中,每个页面由一个Fragment表示,这样可以...
1.几个fragment的使用,代码来自于Demo程序,可用于练习fragment 2.使用了viewpager,参照android4的通讯录代码实现,可用于练习viewPager的使用 3.里面通过getActionBar设置了tab,并去掉默认标题栏
Fragment和ActionBar都是Android3.0之后出现的,Fragment,碎片,主要是为了支持更多的UI设计在大屏幕设备上,如平板。因为现在设备的屏幕越来越大,使用Fragment可以更灵活的管理视图层次的变化。像Activity一样,...
在Android应用开发中,`ActionBar`、`ViewPager`、`Fragment`和`Observable`是四个非常重要的组件,它们各自有着独特的功能,同时在构建复杂的用户界面时常常被一起使用。让我们详细了解一下这些组件以及如何在实际...